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

时间:2015-03-22 16:09:38

标签: typescript typescript1.4

我开始玩TypeScript,我发现它非常棒。但我对*.d.ts*.ts之间的区别感到困惑。它们之间的区别是什么?任何人都可以用恰当的例子来解释我吗?

2 个答案:

答案 0 :(得分:42)

TypeScript定义文件(*.d.ts

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

例如,假设我有以下JavaScript(Example.js):

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

单独使用此文件,我的TypeScript代码将不会有任何线索存在此函数。它不会知道它的名字,也不会知道它的参数。我们可以通过在定义文件中描述它来解决这个问题(Example.d.ts):

declare function displayMessage(message: string);

现在我可以在TypeScript中使用函数displayMessage而不会出现编译错误,当我错误地使用它时会遇到编译错误(例如,如果我提供了2个参数而不是{{1}我会得到一个错误。)

简而言之:定义文件允许您在TypeScript中使用现有的JavaScript代码,而无需在TypeScript中重写代码。

TypeScript文件(1

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

答案 1 :(得分:21)

* .d.ts文件中允许的任何内容也可能出现在* .ts文件中,但不会出现相反的情况。因此* .d.ts允许TypeScript功能的子集。

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

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

还允许使用Const枚举(在1.4中添加),这与在输出JavaScript中生成对象的普通枚举不同。

顶级类,变量,模块和函数必须以declare为前缀。通常你会看到一个顶级declare module,因此其中的内容也是纯粹的声明:

declare module Something {
    var x;
}

它们不仅仅是将TypeScript接口暴露给用JavaScript编写的代码。您还可以使用它们来声明代码中广泛使用的一组公共接口,因此不需要require特定的物理模块来获取这些接口的可见性。