许多TypeScript示例文件在构建时会自动创建*.d.ts
类型的文件。其中一些示例涉及环境声明。然而,这并不能帮助我理解这些文件背后的思想和意义,因为它们基本上只是重复了其他类已经拥有的内容。
那么为什么要创建额外的*.d.ts
文件?它们如何在我的代码中帮助我?
许多TypeScript示例文件在构建时会自动创建*.d.ts
类型的文件。其中一些示例涉及环境声明。然而,这并不能帮助我理解这些文件背后的思想和意义,因为它们基本上只是重复了其他类已经拥有的内容。
那么为什么要创建额外的*.d.ts
文件?它们如何在我的代码中帮助我?
TypeScript编译器生成的定义文件实际上大部分是您编写的代码的重复,但存在一些明显的差异:
这些声明文件的用例是用于分发库。您可以分发一个库而无需原始的TypeScript代码(因为在运行时无关紧要),仅分发已编译的JavaScript。 JavaScript消费者将使用JavaScript,不关心其来源。 TypeScript消费者也将在运行时使用JavaScript,但是.d.ts文件将允许编译器检查代码,即使库的原始TypeScript源代码不存在。
同样的方法也可以用于将一个大项目分成几个使用声明文件建立它们之间接口的小项目。每个项目都可以独立重新编译,而无需重新编译所有项目,从而减少编译时间。TypeScript编译器实际上正在计划将来增加对此的内置支持。
如果你有一个JavaScript文件,并且想要在里面添加丰富的类型信息,你可以在声明文件中实现。这就像将你的TypeScript分成两个文件一样; 一个只包含普通JavaScript的JavaScript文件.js
,另一个是包含所有类型信息的声明文件.d.ts
。
这意味着两个文件之间存在某些冗余。
通常情况下,如果你编写TypeScript库,则会自动生成JavaScript和声明文件,并打包这些文件而不是原始TypeScript文件。这意味着库可以被JavaScript和TypeScript应用程序使用,并允许使用不同版本的TypeScript来使用消费库。
如果您想要包括编译时的JavaScript文件,您没有必要创建一个声明文件 - IDEs允许在JavaScript中进行类似于TypeScript的推断(例如,VS Code允许使用// @ts-check
注释),如果您愿意,编译器也允许包含JavaScript文件在编译中。