*.d.ts文件是用来做什么的?

32

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

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


3
相关问题:https://dev59.com/jFgR5IYBdhLWcg3wNLOC在TypeScript中,“typings”是指描述库或模块类型信息的文件。它们通过扩展原始JavaScript代码的类型注释来提供类型检查和自动补全功能。Typings文件可以手动编写,也可以使用工具如Typings或npm @types自动生成。 - Alex
2个回答

41

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

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

这些声明文件的用例是用于分发库。您可以分发一个库而无需原始的TypeScript代码(因为在运行时无关紧要),仅分发已编译的JavaScript。 JavaScript消费者将使用JavaScript,不关心其来源。 TypeScript消费者也将在运行时使用JavaScript,但是.d.ts文件将允许编译器检查代码,即使库的原始TypeScript源代码不存在。

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


有没有一种方法可以基于 .d.ts 访问实现? - superigno
@superigno 你具体是什么意思?如果你的代码是TS,最近版本的ts有可能生成声明源映射。我不知道是否有工具可以帮助将定义文件映射到没有TS的JS文件中。 - Titian Cernicova-Dragomir

14

如果你有一个JavaScript文件,并且想要在里面添加丰富的类型信息,你可以在声明文件中实现。这就像将你的TypeScript分成两个文件一样; 一个只包含普通JavaScript的JavaScript文件.js,另一个是包含所有类型信息的声明文件.d.ts

这意味着两个文件之间存在某些冗余。

通常情况下,如果你编写TypeScript库,则会自动生成JavaScript和声明文件,并打包这些文件而不是原始TypeScript文件。这意味着库可以被JavaScript和TypeScript应用程序使用,并允许使用不同版本的TypeScript来使用消费库。

如果您想要包括编译时的JavaScript文件,您没有必要创建一个声明文件 - IDEs允许在JavaScript中进行类似于TypeScript的推断(例如,VS Code允许使用// @ts-check注释),如果您愿意,编译器也允许包含JavaScript文件在编译中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接