TypeScript:*.ts 和 *d.ts 扩展名



我已经意识到一段时间了,有些打字稿文件有.d.ts,而另一些则有单一的.ts扩展。

他们代表什么? 有什么区别?

这些是声明文件,或者有时在 Web 上称为definition files

我将用示例来回答,该示例显示了为什么需要这些文件。

假设您有一个具有f函数的lib.js库。

"use strict";
function f() {
}
exports.f = f;

此库可与其他js文件很好地配合使用。例如。从main.js使用:

var f = require('./lib').f;
f();

但是你正在用 TypeScript 进行开发,你需要使用这个函数,所以在你的index.ts中你写了以下内容:

import {f} from './lib';

但是打字稿编译器会给你一个错误:

Error:(1, 17) TS2307:Cannot find module './lib'.

这是因为打字稿无法读取js文件。所以你需要告诉打字稿编译器你的模块和一个函数。当然,您不想在打字稿中重写整个库。但是有一个解决方案 - 声明文件。您可以使用index.ts中的函数f,方法是通过将以下内容放入lib.d.ts文件中为lib.js创建声明文件:

export declare function f(): void;

现在它将全部正确编译。如果您使用 TypeScript 编写,则可以通过在文件中指定"declaration": true,-d选项来自动生成这些文件tsconfig.jsontsc.

当您需要它们时

因此,在打字稿编译期间,d.ts文件与其 JavaScript 对应项(文件)一起使用,而不是原始.ts文件,如果:

  • 你希望用JavaScript编写的库被其他人使用。 用打字稿写
  • 你想使用用JavaScript编写的库 在您的 TypeScript 项目中

有时,tsd.ts文件都可用,但开发人员选择仅公开d.ts文件。这是angular2团队为其npm存储库选择的方法。

>.ts是一个TypeScript代码文件。.d.ts是一个声明文件,通常用于定义非TypeScript API(如DOM或jQuery)的类型。

.d.ts文件通常表示类型定义文件。通常适用于已经存在于javascript中的库,没有打字稿源代码。.ts文件将是您的打字稿文件

一个d.ts文件只包含各种现有JavaScript库的函数,道具等的定义。(代表绝对键入的脚本)

.ts文件是您在其上开发的文件,并转换为JS文件。 (代表打字脚本)

.d.ts文件不能包含代码,这会在编译过程中生成javascript。它仅适用于定义(通常为外部javascrip库)。例如,在 .d.ts 文件中定义"命名空间"而不定义"声明"修饰符是错误的。

最新更新