2016-11-28 289 views

回答

9

这些是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声明文件中使用函数findex.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 打字稿项目

有时候,两者tsd.ts文件都可用,但开发商的动产仅暴露d.ts文件。这是angular2团队为其npm存储库选择的方法。

+0

所以,据我所知,如果我正在开发打字稿库,我不需要创建任何'.d.ts'文件,不是吗? – Jordi

+1

如果你希望其他使用** javascript **而不是打字机的人来使用你的库,你**需要提供'd.ts'文件。但正如我在我的回答中提到的那样,您不需要编写它们,它们将由打字机编译器自动生成。 –

+0

可能是一个noob问题,但是“你希望你的用JavaScript编写的lib被其他在TypeScript中编写的用户使用”与“如果你希望其他用JavaScript编写而不是打字的用户使用你的库,你需要提供d.ts文件“。是否为Typescript开发人员提供的声明文件可以帮助他们消费第三方JS文件;主要以intellisense的形式出现,并且在你提供的优秀例子中? –

2

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

1

.d.ts文件通常表示类型定义文件。一般来说,对于已经存在于JavaScript中的库,没有打印源代码。 .ts文件将成为您的打字稿文件

1

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

.ts文件是您在其上开发并转换为js文件的文件。 (代表键入的脚本)

1

.d.ts文件不能包含代码,这会在编译期间生成JavaScript代码。它只是用于定义(通常是外部javascrip库的定义)。例如,在.d.ts文件中没有“声明”修饰符的情况下定义“名称空间”是错误的。