打字稿中 *.d.ts 与 *.ts 有什么区别?

问题描述 投票:0回答:3

我开始使用 TypeScript,我发现它真的很棒。但我对

*.d.ts
*.ts
之间的区别感到困惑。他们之间有什么区别?有人可以用正确的例子解释我吗?

typescript typescript1.4
3个回答
121
投票

TypeScript 声明文件 (

*.d.ts
)

这些文件用于描述在 TypeScript 中使用的 JavaScript 文件的“形状”。

例如,假设我在 TypeScript 编译器已知范围之外的文件中包含以下 JavaScript 代码:

function displayMessage(message) {
    alert(message);
}

仅凭此文件,我的 TypeScript 代码将不会知道此函数的存在。它不知道它的名字,也不知道它的参数。我们可以通过在声明文件中描述它来解决这个问题(Example.d.ts):

declare function displayMessage(message: string);

现在我可以在 TypeScript 中使用函数

displayMessage
而不会出现编译错误,当我错误地使用它时,我会收到编译错误(例如,如果我提供 2 个参数而不是 1 个参数,我会收到错误)。

简而言之: 声明文件允许您在 TypeScript 中使用现有的 JavaScript 代码和类型信息,而无需在 TypeScript 中重写代码。

TypeScript 文件 (

.ts
)

这是您在编写 TypeScript 时使用的标准文件扩展名。它将被编译为 JavaScript。


57
投票

*.d.ts 文件中允许的任何内容也可能出现在 *.ts 文件中,但反之则不然。因此 *.d.ts 允许使用 TypeScript 功能的子集。

*.d.ts 文件仅允许包含不会在输出中生成任何 JavaScript 代码的 TypeScript 代码。如果您尝试使用 TypeScript 的任何可生成 JavaScript 的功能,您将收到错误消息。

接口是允许的,因为它们在编译后完全消失。

也允许常量枚举(在 1.4 中添加),这与在输出 JavaScript 中生成对象的普通枚举不同。

顶级类、变量、模块和函数必须以

declare
为前缀。通常你会看到一个顶级的
declare module
,因此它里面的东西也是纯粹的声明:

declare module Something {
    var x;
}

它们的用途不仅仅是将 TypeScript 接口暴露给用 JavaScript 编写的代码。您还可以使用它们来声明一组在代码中广泛使用的通用接口,因此没有必要

require
特定的物理模块只是为了获得这些接口的可见性。


0
投票

我对 *.d.ts 文件的看法非常简单。

  1. *.d.ts 文件仅包含类型,不能包含可执行代码;因此,它们会产生“无副作用”,并且在不进行类型检查时可以忽略。

  2. 系统可以使用 .d.ts 文件扩展名查找类型,即使该文件未被其他编译文件导入。

  3. 某些 Typescript 指令必须在 *.d.ts 文件中声明。

© www.soinside.com 2019 - 2024. All rights reserved.