*.d.ts 文件有什么用?

What are *.d.ts files for?

在许多 TypeScript 示例中,*.d.ts 类型的文件是在构建时自动创建的。一些例子谈到 。虽然这并不能帮助我理解这些文件背后的想法和意义,因为它们基本上只是重复其他 类 已经拥有的内容。

那么为什么还要创建额外的 *.d.ts 文件呢?他们如何在我的代码中帮助我?

如果您有一个 JavaScript 文件并且您想要向其中添加丰富的类型信息,您可以在声明文件中执行此操作。这就像在两个文件之间拆分你的 TypeScript;一个 JavaScript 文件 .js 只有普通的 JavaScript 和一个包含所有类型信息的声明文件 .d.ts

这意味着文件之间存在一些冗余。

通常,如果您编写 TypeScript 库,您会自动生成 JavaScript 和声明文件并打包它们,而不是原始的 TypeScript。这意味着该库可以从 JavaScript 和 TypeScript 应用程序中使用,并允许使用库使用与您的库不同的 TypeScript 版本。

如果您有 JavaScript 个要包含在编译中的文件,则不必创建声明文件 - IDE 允许在 JavaScript 中进行 TypeScript 样式的推断(例如,VS Code允许 // @ts-check 注释)并且如果您愿意,编译器允许将 JavaScript 包含在编译中。

TypeScript 编译器生成的定义文件实际上大部分是您编写的代码的重复,但有一些显着差异:

  • 它们不包含实现,只包含声明
  • 它们只包含可公开访问的类型

这些声明文件的用例是分发库。您可以分发一个没有原始 TypeScript 代码的库(因为这在运行时并不重要)并且只分发编译后的 JavaScript。 JavaScript 消费者会使用 JavaScript 而不会关心它的来源。 TypeScript 使用者还将在运行时使用 JavaScript,但 .d.ts 文件将允许编译器检查代码,即使库的原始 TypeScript 源不存在。

同样的方法也可用于将一个大项目分解成几个较小的项目,这些项目使用声明文件在它们之间建立接口。每个项目都可以独立重新编译,而无需重新编译所有项目,从而减少了编译时间。 TypeScript 编译器实际上计划在未来为此添加内置支持。