【问题标题】:TypeScript - Declare vs Export - Best Practices?TypeScript - 声明与导出 - 最佳实践?
【发布时间】:2018-07-19 07:42:06
【问题描述】:

简而言之,使用 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 {...}

当然,如果必须导入自己的另一种类型,即使声明也无法正常工作。 (除非有更好的方法)

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

【问题讨论】:

    标签: typescript module interface export declare


    【解决方案1】:

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

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

    这有几个优点:

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

    【讨论】:

    • 这个链接到 Angular 404s 现在:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多