添加 dts
.d.ts
文件是什么
在 TypeScript 中,.d.ts
文件是 类型声明文件,全称是 "declaration file"。它的主要作用是为 JavaScript 代码或没有类型定义的 TypeScript 代码提供类型信息。
你安装使用刚刚自己发的包的时候,有没有注意到,你的 IDE
没有出现任何的智能提示
这是因为你没有为你的包提供任何的 dts
, 也就是 xxx.d.ts
文件
下面这 2 个标志想必大家在 npmjs
进行搜索的时候都见到过。
这个标志代表这个包发布的时候,本身包里面就自己提供了 dts
,这个需要在打包生成出 dts
之后,在 package.json
中,通过 types
字段指定了 dts
的位置
比如我发的所有包 weapp-tailwindcss, weapp-vite, modern-ahocorasick 等等...
这个标志代表这个包发布的时候,本身包里面没有 dts
,但是有好心人给他写了 dts
,并发布到了 @types/*
这个作用域下了,所以这个包等同于也有 dts
,而且 vscode
也在发现你安装了这样的包之后,也会去下载 @types/*
这样的包,当然更好的方式是你要显式安装 @types
包
举个例子,比如 lodash 和 @types/lodash,点击 lodash npm
主页面的这个标志,就直接跳转到 @types/lodash
DefinitelyTyped 这个是微软的仓库,用于发布管理所有的
@types
包
这里就需要提到包的质量判断标准,一般来说呈现下面的趋势:
.d.ts
文件的作用
- 描述模块或库的类型结构,使 TypeScript 可以进行类型检查和代码补全。
- 为 JavaScript 库提供类型支持,例如 jQuery、Lodash、React 等第三方库。
- 声明全局变量、模块、类、接口、函数等,而不提供实际实现。
举个简单例子
假设你有一个 JavaScript 文件 math.js
:
// math.js
function add(a, b) {
return a + b
}
你可以写一个 .d.ts
文件来告诉 TypeScript 这个模块的类型:
// math.d.ts
declare function add(a: number, b: number): number
这样你在 TypeScript 中使用 add
函数时就能获得类型检查和智能提示了。
使用场景
第三方库没有内置类型定义时
- 可以使用 DefinitelyTyped 的类型库(安装例如
@types/lodash
); - 或者自己写
.d.ts
文件。
- 可以使用 DefinitelyTyped 的类型库(安装例如
为已有的 JS 代码添加类型支持
- 特别是在从 JS 项目逐步迁移到 TS 时。
定义公共 API 接口或模块类型
- 比如声明一个共享的接口模块
types.d.ts
,全项目通用。
- 比如声明一个共享的接口模块
类型声明的获取方式
- 手动编写
.d.ts
- 自动生成(例如通过
tsc --declaration
) - 安装类型定义包:
npm install --save-dev @types/express