我已经意识到一段时间了,有些打字稿文件有.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.json
tsc
.
当您需要它们时
因此,在打字稿编译期间,d.ts
文件与其 JavaScript 对应项(文件)一起使用,而不是原始.ts
文件,如果:
- 你希望用JavaScript编写的库被其他人使用。 用打字稿写
- 你想使用用JavaScript编写的库 在您的 TypeScript 项目中
有时,ts
和d.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 文件中定义"命名空间"而不定义"声明"修饰符是错误的。