*.d.ts 与打字稿中的 *.ts 有什么区别?
What is the difference between *.d.ts vs *.ts in typescript?
我开始使用 TypeScript,我发现它真的很棒。但是我对 *.d.ts
和 *.ts
之间的区别感到困惑。它们之间有什么区别?谁能用适当的例子向我解释一下?
TypeScript 声明文件 (*.d.ts
)
这些文件用于描述在 TypeScript 中使用的 JavaScript 文件的“形状”。
例如,假设我在 TypeScript 编译器知道的范围之外的某个文件中有以下 JavaScript 代码:
function displayMessage(message) {
alert(message);
}
单独使用这个文件,我的 TypeScript 代码将不知道这个函数的存在。它不会知道它的名字,也不会知道它的参数。我们可以通过在声明文件中描述它来解决这个问题 (Example.d.ts):
declare function displayMessage(message: string);
现在我可以在 TypeScript 中使用函数 displayMessage
而不会出现编译错误,并且当我不正确地使用它时我会得到编译错误(例如,如果我提供了 2 个参数而不是 1 个我会得到一个错误).
简而言之: 声明文件允许您使用带有类型信息的 TypeScript 中现有的 JavaScript 代码,而无需在 TypeScript 中重写代码。
TypeScript 文件 (.ts
)
这是您在编写 TypeScript 时使用的标准文件扩展名。它将被编译为 JavaScript.
*.d.ts 文件中允许的任何内容也可能出现在 *.ts 文件中,但反之则不行。所以 *.d.ts 允许 TypeScript 的一部分功能。
*.d.ts 文件只允许包含不会在输出中生成任何 JavaScript 代码的 TypeScript 代码。如果您尝试使用会生成 JavaScript 的 TypeScript 的任何功能,您将收到一个错误。
允许接口,因为它们在编译后完全消失。
也允许使用 Const 枚举(在 1.4 中添加),这与在输出中生成对象的普通枚举不同 JavaScript。
顶级类,变量、模块和函数必须以declare
为前缀。通常你会看到一个顶层 declare module
并且它里面的东西因此也是纯粹的声明:
declare module Something {
var x;
}
它们的用途不仅仅是将 TypeScript 接口暴露给用 JavaScript 编写的代码。您还可以使用它们来声明一组在您的代码中广泛使用的通用接口,因此没有必要 require
一个特定的物理模块只是为了获得这些接口的可见性。
我开始使用 TypeScript,我发现它真的很棒。但是我对 *.d.ts
和 *.ts
之间的区别感到困惑。它们之间有什么区别?谁能用适当的例子向我解释一下?
TypeScript 声明文件 (*.d.ts
)
这些文件用于描述在 TypeScript 中使用的 JavaScript 文件的“形状”。
例如,假设我在 TypeScript 编译器知道的范围之外的某个文件中有以下 JavaScript 代码:
function displayMessage(message) {
alert(message);
}
单独使用这个文件,我的 TypeScript 代码将不知道这个函数的存在。它不会知道它的名字,也不会知道它的参数。我们可以通过在声明文件中描述它来解决这个问题 (Example.d.ts):
declare function displayMessage(message: string);
现在我可以在 TypeScript 中使用函数 displayMessage
而不会出现编译错误,并且当我不正确地使用它时我会得到编译错误(例如,如果我提供了 2 个参数而不是 1 个我会得到一个错误).
简而言之: 声明文件允许您使用带有类型信息的 TypeScript 中现有的 JavaScript 代码,而无需在 TypeScript 中重写代码。
TypeScript 文件 (.ts
)
这是您在编写 TypeScript 时使用的标准文件扩展名。它将被编译为 JavaScript.
*.d.ts 文件中允许的任何内容也可能出现在 *.ts 文件中,但反之则不行。所以 *.d.ts 允许 TypeScript 的一部分功能。
*.d.ts 文件只允许包含不会在输出中生成任何 JavaScript 代码的 TypeScript 代码。如果您尝试使用会生成 JavaScript 的 TypeScript 的任何功能,您将收到一个错误。
允许接口,因为它们在编译后完全消失。
也允许使用 Const 枚举(在 1.4 中添加),这与在输出中生成对象的普通枚举不同 JavaScript。
顶级类,变量、模块和函数必须以declare
为前缀。通常你会看到一个顶层 declare module
并且它里面的东西因此也是纯粹的声明:
declare module Something {
var x;
}
它们的用途不仅仅是将 TypeScript 接口暴露给用 JavaScript 编写的代码。您还可以使用它们来声明一组在您的代码中广泛使用的通用接口,因此没有必要 require
一个特定的物理模块只是为了获得这些接口的可见性。