【发布时间】:2018-11-01 00:05:57
【问题描述】:
在许多 TypeScript 示例中,*.d.ts 类型的文件是在构建时自动创建的。一些例子谈到ambient declarations。虽然这并不能帮助我理解这些文件背后的想法和意义,因为它们基本上只是重复其他类已有的内容。
那么为什么还要创建额外的*.d.ts 文件呢?他们如何在我的代码中帮助我?
【问题讨论】:
标签: typescript .d.ts
在许多 TypeScript 示例中,*.d.ts 类型的文件是在构建时自动创建的。一些例子谈到ambient declarations。虽然这并不能帮助我理解这些文件背后的想法和意义,因为它们基本上只是重复其他类已有的内容。
那么为什么还要创建额外的*.d.ts 文件呢?他们如何在我的代码中帮助我?
【问题讨论】:
标签: typescript .d.ts
TypeScript 编译器生成的定义文件确实大部分是您编写的代码的重复,但有一些显着差异:
这些声明文件的用例是分发库。你可以分发一个没有原始 TypeScript 代码的库(因为这在运行时并不重要)并且只分发编译后的 JavaScript。 JavaScript 消费者将使用 JavaScript,而不关心它的来源。 TypeScript 使用者也将在运行时使用 JavaScript,但 .d.ts 文件将允许编译器检查代码,即使该库的原始 TypeScript 源不存在。
同样的方法也可用于将一个大型项目分解为几个较小的项目,这些项目使用声明文件在它们之间建立接口。每个项目都可以独立重新编译,无需重新编译所有项目,从而减少编译时间。 TypeScript 编译器实际上计划在未来添加对此的内置支持。
【讨论】:
如果您有一个 JavaScript 文件,并且想要向其中添加丰富的类型信息,您可以在声明文件中执行此操作。这就像在两个文件之间拆分你的 TypeScript;一个 JavaScript 文件 .js 只包含纯 JavaScript,一个声明文件 .d.ts 包含所有类型信息。
这意味着文件之间存在一些冗余。
通常,如果您编写 TypeScript 库,您会自动生成 JavaScript 和声明文件并将其打包,而不是原始的 TypeScript。这意味着该库可以从 JavaScript 和 TypeScript 应用程序中使用,并允许使用库使用与您的库不同的 TypeScript 版本。
如果您有想要包含在编译中的 JavaScript 文件,则不必创建声明文件 - IDE 允许在 JavaScript 中进行 TypeScript 样式的推断(例如,VS Code 允许使用 // @ts-check 注释)和编译器如果您愿意,允许将 JavaScript 包含在编译中。
【讨论】: