gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:18 29 4
gpt4 key购买 nike

我已经意识到有一段时间了,一些 typescript 文件有一个 .d.ts 而其他的只有一个 .ts 扩展名。

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

最佳答案

这些是 declaration 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';

但是 typescript 编译器会给你一个错误:

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

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

export declare function f(): void;

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

当你需要它们的时候

所以 d.ts 文件在 typescript 编译期间与它们的 JavaScript 对应文件(文件)一起使用,而不是原始的 .ts 文件,如果:

  • 你想让你用 JavaScript 编写的库被其他人使用用 TypeScript 书写
  • 您想使用用 JavaScript 编写的库在你的 TypeScript 项目中

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

关于TypeScript:*.ts 和 *d.ts 扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40840821/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com