TypeScript - 声明与导出 - 最佳实践?

时间:2018-02-08 16:40:55

标签: typescript module interface export declare

简短而甜蜜,使用declare或export?定义我自己的接口是更好的做法吗?

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

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

export class Something implements ISomething {...}

VS

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

// something.ts
export class Something implements ISomething {...}

当然,如果必须导入其自己的另一种类型,即使声明也不能在环境中工作。 (除非有更好的方法)

// 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 {...}

1 个答案:

答案 0 :(得分:3)

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

https://github.com/angular/angular/blob/master/packages/http/src/interfaces.ts

这有一些优点:

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