回答
这些是declaration files,或者有时它们在网络上被称为definition files
。
我会用示例说明为什么需要这些文件。
假设,你有一个lib.js
库与f
功能。
"use strict";
function f() {
}
exports.f = f;
该库可与其他js
文件一起使用。例如。从main.js
使用:
var f = require('./lib').f;
f();
但要以打字稿发展,就需要使用此功能,所以在你的index.ts
你写了以下内容:
import {f} from './lib';
但打字稿编译器会给你一个错误:
Error:(1, 17) TS2307:Cannot find module './lib'.
这是因为打字稿无法读取js
文件。所以你需要告诉打印机编译器关于你的模块和函数。当然,你不想重写打字稿中的整个库。但是有一个解决方案 - 声明文件。您可以通过把创建的lib.js
声明文件中使用函数f
在index.ts
以下为lib.d.ts
文件:
export declare function f(): void;
现在都将正确编译。如果您使用的是TypeScript,则可以通过tsconfig.json
文件中的"declaration": true,
或tsc
中的-d
选项自动生成这些文件。
当您在打字稿编译时间,而不是原来的.ts
文件,如果需要他们
所以d.ts
文件用于沿着他们的JavaScript同行(文件):
- 你希望你的lib写在JavaScript中供其他人使用 在TypeScript中写入
- 您想要使用JavaScript中编写的lib 打字稿项目
有时候,两者ts
和d.ts
文件都可用,但开发商的动产仅暴露d.ts
文件。这是angular2
团队为其npm
存储库选择的方法。
.ts
是一个TypeScript代码文件。 .d.ts
是一个declaration file,通常用于定义非TypeScript API的类型(如DOM或jQuery)。
.d.ts文件通常表示类型定义文件。一般来说,对于已经存在于JavaScript中的库,没有打印源代码。 .ts文件将成为您的打字稿文件
d.ts文件仅包含各种现有JavaScript库的函数,道具等的定义。 (代表绝对键入的脚本)
.ts文件是您在其上开发并转换为js文件的文件。 (代表键入的脚本)
.d.ts文件不能包含代码,这会在编译期间生成JavaScript代码。它只是用于定义(通常是外部javascrip库的定义)。例如,在.d.ts文件中没有“声明”修饰符的情况下定义“名称空间”是错误的。
- 1. Typescript 2.0错误:内部版本:文件'en-US'的未知扩展名。只允许.ts和d.ts扩展
- 2. Typescript:使用lib.core.es6.d.ts
- 3. 如何扩展在外部库d.ts中声明的接口?
- 4. Typescript .d.ts编译错误
- 5. TypeScript 2.1+ tsconfig扩展
- 6. 我想开发一个Visual Studio扩展,就像TypeScript扩展
- 7. 如何扩展Typescript接口?
- 8. 在TypeScript中扩展HTMLElement
- 9. TypeScript + ES6 + .system.js + d.td +扩展
- 10. 在TypeScript中扩展数组
- 11. 从TypeScript扩展数组
- 12. Typescript包含扩展方法
- 13. 在.d.ts文件中定义的扩展接口
- 14. 在Typescript中扩展抽象类
- 15. 在Angular2中扩展模块TS类型
- 16. 角2:http.get不明白TS扩展
- 17. Visual Studio + ASP.NET Core + TypeScript - 谁编译* .ts?
- 18. 在TypeScript中扩展Kendo UI窗口
- 19. TypeScript:在.d.ts中的函数别名
- 20. Typescript error TS1005:';'预期。 TS v1.8.10
- 21. TypeScript DefinitelyTyped Ember.js d.ts不会编译
- 22. .ts文件不被视为TypeScript模块
- 23. 如何在TypeScript中生成“* .d.ts”?
- 24. 为spin.js生成Typescript .d.ts文件
- 25. 如何创建“正确的”TypeScript .d.ts?
- 26. 使用Awesome Typescript Loader处理.d.ts文件
- 27. mapbox-gl-draw的Typescript定义d.ts
- 28. TypeScript编译错误“未知的文件扩展名”
- 29. Typescript扩展关键字不工作
- 30. 模块中的TypeScript扩展对象
所以,据我所知,如果我正在开发打字稿库,我不需要创建任何'.d.ts'文件,不是吗? – Jordi
如果你希望其他使用** javascript **而不是打字机的人来使用你的库,你**需要提供'd.ts'文件。但正如我在我的回答中提到的那样,您不需要编写它们,它们将由打字机编译器自动生成。 –
可能是一个noob问题,但是“你希望你的用JavaScript编写的lib被其他在TypeScript中编写的用户使用”与“如果你希望其他用JavaScript编写而不是打字的用户使用你的库,你需要提供d.ts文件“。是否为Typescript开发人员提供的声明文件可以帮助他们消费第三方JS文件;主要以intellisense的形式出现,并且在你提供的优秀例子中? –