TypeScript-声明与导出-最佳做法?

6 module export interface declare typescript

简短而甜美,使用声明或导出定义自己的接口是更好的做法吗?

// i.something.d.ts
export default interface ISomething {
    myValue: string;
} 

// something.ts
import ISomething from 'i.something';

export class Something implements ISomething {...}
Run Code Online (Sandbox Code Playgroud)

// i.something.d.ts
declare interface ISomething {
    myValue: string;
} 

// something.ts
export class Something implements ISomething {...}
Run Code Online (Sandbox Code Playgroud)

当然,即使声明必须导入自己的另一种类型,它也不能在环境上起作用。(除非有更好的方法可以做到)

// i.something-else.d.ts
import SomeBiggerThing from '...';
import SomeKindOfType from '...';

declare interface ISomethingElse extends SomeBiggerThing {
    myValue: SomeKindOfType;
} 

// something-else.ts
// ISomethingElse isn't available unless I import it, because it imports its own stuff.
import ISomethingElse from 'i.something-else';

export class Something implements ISomethingElse {...}
Run Code Online (Sandbox Code Playgroud)

Nat*_*end 19

大多数大型/成熟的 TypeScript 库避免依赖环境声明,而是export需要在当前文件之外重用的任何内容。例如,Angular 代码库interfaces.ts为每个模块都有一个文件,该文件被导入到需要引用接口的每个文件中:

https://github.com/angular/angular/tree/0b1f5d21270063b2019b11a9494397916d3977d6/packages/http/src/interfaces.ts

这有几个优点:

  • 文件中使用的所有类型都通过import文件顶部的语句显式引用。
  • 导出模块的接口以使其对模块的使用者可用更容易。为了导出环境接口,您需要直接在模块的主文件中定义接口(只能从模块导出局部声明)。
  • 它更像是 JavaScript 的。现代 JavaScript 依赖于importexport语句,而环境类型上下文是仅 TypeScript 的概念。