TypeScript - 声明与导出 - 最佳实践?
TypeScript - Declare vs Export - Best Practices?
简短而贴心,用 declare 或 export 定义我自己的接口是更好的做法吗?
// i.something.d.ts
export default interface ISomething {
myValue: string;
}
// something.ts
import ISomething from 'i.something';
export class Something implements ISomething {...}
对比
// i.something.d.ts
declare interface ISomething {
myValue: string;
}
// something.ts
export class Something implements ISomething {...}
当然,如果它必须导入自己的另一种类型,即使 declare 也无法在环境中工作。 (除非有更好的方法)
// 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 {...}
大多数 large/mature TypeScript 库避免依赖环境声明,而是 export
任何需要在当前文件之外重用的东西。例如,Angular 代码库为每个模块都有一个 interfaces.ts
文件,该文件被导入到需要引用接口的每个文件中:
这有几个优点:
- 文件中使用的所有类型都通过文件顶部的
import
语句明确引用。
- 可以更轻松地导出模块的接口以供模块的使用者使用。为了导出环境接口,您需要直接在模块的主文件中定义接口(只能从模块中导出本地声明)。
- 更 JavaScript-y。现代 JavaScript 依赖于
import
和 export
语句,而环境类型上下文是一个仅限 TypeScript 的概念。
简短而贴心,用 declare 或 export 定义我自己的接口是更好的做法吗?
// i.something.d.ts
export default interface ISomething {
myValue: string;
}
// something.ts
import ISomething from 'i.something';
export class Something implements ISomething {...}
对比
// i.something.d.ts
declare interface ISomething {
myValue: string;
}
// something.ts
export class Something implements ISomething {...}
当然,如果它必须导入自己的另一种类型,即使 declare 也无法在环境中工作。 (除非有更好的方法)
// 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 {...}
大多数 large/mature TypeScript 库避免依赖环境声明,而是 export
任何需要在当前文件之外重用的东西。例如,Angular 代码库为每个模块都有一个 interfaces.ts
文件,该文件被导入到需要引用接口的每个文件中:
这有几个优点:
- 文件中使用的所有类型都通过文件顶部的
import
语句明确引用。 - 可以更轻松地导出模块的接口以供模块的使用者使用。为了导出环境接口,您需要直接在模块的主文件中定义接口(只能从模块中导出本地声明)。
- 更 JavaScript-y。现代 JavaScript 依赖于
import
和export
语句,而环境类型上下文是一个仅限 TypeScript 的概念。