什么是 .d.ts 文件以及为什么需要它

Posted

技术标签:

【中文标题】什么是 .d.ts 文件以及为什么需要它【英文标题】:what is .d.ts file and why it is needed 【发布时间】:2015-07-04 06:37:00 【问题描述】:

我正在查看angular-ui-router 的源代码,angular-ui-router.d.ts 文件夹中的angular-ui-router.d.ts 文件包含以下内容:

declare module ng.ui 

    interface IState 
        name?: string;
        template?: string;
        templateUrl?: any; // string || () => string
        templateProvider?: any; // () => string || IPromise<string>
    

    interface ITypedState<T> extends IState 
        data?: T;
    

我读过文件是 TypeScript 类型定义。它是什么?为什么需要它?

【问题讨论】:

About "*.d.ts" in TypeScript的可能重复 【参考方案1】:

这是一个declaration file:

编译 TypeScript 脚本时,可以选择生成 声明文件(扩展名为 .d.ts),用作 与已编译 javascript 中的组件的接口。正在进行中 编译器剥离所有函数和方法体并保留 仅导出类型的签名。所结果的 然后可以使用声明文件来描述导出的虚拟 第三方 JavaScript 库或模块的 TypeScript 类型 开发人员从 TypeScript 中使用它。

声明文件的概念类似于标头的概念 在 C/C++ 中找到的文件。

【讨论】:

谢谢,这是否意味着他们使用 TypeScript 编写了这段代码?还是他们只是想让有关接口的信息易于访问?您能否详细说明一下当第三方开发人员从 TypeScript 使用它时,生成的声明文件可以用来描述 JavaScript 库或模块的导出虚拟 TypeScript 类型。 在 C/C++ 中,我们使用头文件向外部用户公开函数、结构、类,而不会透露我们的实现。与 TypeScript 一样,外部用户只知道导出的类型,所以他们知道什么是操作、类而不知道实现。 @MarcusHenrique,是的,我很好奇这是使用 TypeScript 编写的副产品,还是从 JavaScript 源文件生成的。 这可以通过多种方式生成(手动,从 TSC 编译器,有时从 JavaScript 等)。 需要,如果你想让 TypeScript 代码通过自动完成、类型检查等来引用这个模块,你需要定义文件。如果不是,您可以将其定义为“任何”类型,并像在常规 JavaScript 中一样使用它,也就是说,无需任何编译器检查。【参考方案2】:

这里是definition。 d.ts 文件描述了 3rd 方库的形状,并使 TypeScript 编译器知道如何处理这个 3rd 方代码(向编译器提供类型信息)

【讨论】:

您能详细说明一下吗?为什么这很重要?例如,为什么我们不能只编写一个类并将其导出?

以上是关于什么是 .d.ts 文件以及为什么需要它的主要内容,如果未能解决你的问题,请参考以下文章

打字稿中的 *.d.ts 与 *.ts 有啥区别?

TypeScript 接口是不是应该在 *.d.ts 文件中定义

除了可读性之外,“.d.ts”文件名有啥重要意义吗?

TypeScript 声明文件全解析

TypeScript 里的 module 解析过程 - Module Resolution

在“.d.ts”文件中使用“导出声明函数”和“导出函数”有啥区别