【问题标题】:What are *.d.ts files for?*.d.ts 文件有什么用?
【发布时间】:2018-11-01 00:05:57
【问题描述】:

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

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

【问题讨论】:

标签: typescript .d.ts


【解决方案1】:

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

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

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

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

【讨论】:

  • 有没有办法访问基于 .d.ts 的实现?
  • @superigno 你到底是什么意思?如果您的代码是 TS,则有可能在最新版本的 ts 中生成声明源映射。我不知道有什么工具可以帮助将定义文件映射到中间没有 TS 的 JS 文件..
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2020-09-05
    • 2015-07-04
    • 2020-09-06
    • 2018-02-11
    • 2021-08-11
    • 2023-03-06
    • 2020-10-12
    相关资源
    最近更新 更多