乐闻世界logo
搜索文章和话题

Typescript 中的 dts 文件的作用是什么?

5个答案

1
2
3
4
5

.dts 文件,即 TypeScript 声明文件,是一种提供 TypeScript 代码中存在的各类值的类型信息的文件。这些文件通常用于两个主要场景:

  1. 与 JavaScript 库的互操作:当 TypeScript 代码需要与纯 JavaScript 库一起工作时,.dts 文件可以提供该 JavaScript 库中函数、对象和类的类型定义。这样,TypeScript 编译器就能理解 JavaScript 库的结构,并且确保 TypeScript 代码以类型安全的方式使用这些库。

  2. 模块声明:在 TypeScript 项目中,如果某个模块不希望暴露它的源代码,但需要让其他 TypeScript 代码理解其公共接口的类型信息,那么就可以使用 .dts 文件来声明这些公共接口。

一个简单的例子是,假设有一个简单的 JavaScript 函数库 math-lib.js,它提供了一个加法函数:

javascript
// math-lib.js function add(a, b) { return a + b; } module.exports = { add };

要在 TypeScript 中使用这个库并享受类型检查的好处,我们需要一个声明文件 math-lib.d.ts,如下所示:

typescript
// math-lib.d.ts export function add(a: number, b: number): number;

有了这个声明文件,TypeScript 代码可以安全地导入和使用 add 函数,并且如果尝试传入非数字类型的参数,TypeScript 编译器将会产生错误。

使用声明文件,从而使得 TypeScript 项目能够更加安全地使用外部 JavaScript 代码库,同时也能帮助开发者更好地理解外部代码的类型结构。

2024年6月29日 12:07 回复

d代表声明文件

当编译 TypeScript 脚本时,可以选择生成一个声明文件(扩展名为 .d.ts),该文件充当已编译 JavaScript 中组件的接口。在此过程中,编译器会剥离所有函数和方法体,仅保留导出类型的签名。当第三方开发人员从 TypeScript 使用 JavaScript 库或模块时,生成的声明文件可用于描述导出的虚拟 TypeScript 类型。

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

shell
declare module arithmetics { add(left: number, right: number): number; subtract(left: number, right: number): number; multiply(left: number, right: number): number; divide(left: number, right: number): number; }

可以为现有 JavaScript 库手动编写类型声明文件,就像为 jQuery 和 Node.js 所做的那样。

流行 JavaScript 库的大量声明文件托管在 GitHub 上的DefinelyTypedTypings Registry中。提供了一个名为Typings的命令行实用程序来帮助从存储库中搜索和安装声明文件。

2024年6月29日 12:07 回复

我从必须使用.d.ts文件煞费苦心地映射 JavaScript 项目中学到了以下内容。

使用.d.ts文件映射 JavaScript 要求您的.d.ts文件命名与您的文件命名相同.js。每个文件都需要与同名文件.js保持内联(保存在同一目录中) 。.d.ts将需要类型的 JS/TS 代码从.d.ts文件指向.d.ts文件。

例如:test.jstest.d.ts位于testdir/文件夹中,然后将其导入到反应组件中:

shell
import * as Test from "./testdir/test";

.d.ts文件被导出为命名空间,如下所示:

shell
export as namespace Test; export interface TestInterface1{} export class TestClass1{}
2024年6月29日 12:07 回复

针对_特定案例的_工作示例

假设您有通过_npm_共享的_my-module_。

你安装它npm install my-module

你这样使用它:

shell
import * as lol from 'my-module'; const a = lol('abc', 'def');

该模块的逻辑全部在index.js

shell
module.exports = function(firstString, secondString) { // your code return result }

要添加类型,请创建一个文件index.d.ts

shell
declare module 'my-module' { export default function anyName(arg1: string, arg2: string): MyResponse; } interface MyResponse { something: number; anything: number; }
2024年6月29日 12:07 回复

TypeScript 的 .dts 文件是定义文件(Definition Files)的缩写。它们用于为已存在的 JavaScript 代码提供类型定义信息。这意味着你可以在 TypeScript 项目中使用纯 JavaScript 写的库或框架,而 .dts 文件会告诉 TypeScript 编译器这些库的结构,包括它们的类型、函数、类和其他 API 的签名。

.dts 文件的好处是它们允许开发者在不改变原有 JavaScript 代码的情况下,享受到 TypeScript 提供的类型检查和代码自动补全等特性。

例如,如果你在 TypeScript 项目中使用 jQuery,你可以引入 jQuery 的定义文件(通常通过 DefinitelyTyped 社区提供的 @types/jquery 包),这样 TypeScript 编译器就能理解 jQuery 的 $ 函数、jQuery 对象的方法等等。代码示例如下:

typescript
// 引入 jQuery 的类型定义 /// <reference types="jquery" /> // 使用 jQuery $('selector').html('Hello, world!');

在这个例子中,$('selector').html('Hello, world!'); 这行代码通过了 TypeScript 编译器的类型检查,因为 .dts 文件提供了 .html() 方法的类型信息。

定义文件也可以帮助开发者理解第三方库的使用方式,因为它们充当了库的文档。通过查看定义文件,开发者可以了解到某个函数接受哪些参数,这些参数的类型是什么,以及函数返回什么类型的值。这极大地提高了开发效率和代码的安全性。

最后,.dts 文件也可以用来定义自己的代码的公共接口,特别是在编写库时,这样使用你库的其他 TypeScript 用户就可以获得类型检查和代码智能提示。

2024年6月29日 12:07 回复

你的答案