本章介绍什么是 TypeScript 类型声明文件,以及如何在 Rslib 中生成类型声明文件。
TypeScript 类型声明文件提供 JavaScript 代码的类型信息。类型声明文件通常具有 .d.ts 扩展名。它们允许 TypeScript 编译器理解 JavaScript 代码的类型结构,从而实现以下功能:
Bundle 类型将多个 TypeScript 声明文件打包到一个声明文件中。
优势:
劣势:
Bundleless 类型为库中的每个模块生成单独的声明文件,就像 tsc 一样。
优势:
劣势:
Rslib 支持使用 TypeScript Compiler API 和 tsgo 两种方式来生成类型声明文件,并且支持使用 API Extractor 将生成的类型声明文件打包。
| 类型 | 支持方式 | 说明 |
|---|---|---|
| bundleless | TypeScript Compiler API | 默认方式 |
| bundleless | tsgo | |
| bundle | TypeScript Compiler API + API Extractor | 默认方式 |
| bundle | tsgo + API Extractor |
在 Rslib 配置文件中设置:
@microsoft/api-extractor 作为开发依赖,这是用于打包类型声明文件的底层工具。此功能目前为实验性功能。由于 tsgo 仍处于实验阶段,可能会存在一些 bug 以及未解决的问题或限制。因此,在启用该选项前,请确保在你的项目中进行充分测试。
@typescript/native-preview 作为开发依赖:@typescript/native-preview 要求 Node.js 20.6.0 或更高版本。
Rslib 在生成类型声明文件的过程中,默认会强制设置 tsconfig.json
中的一些配置项以保证 TypeScript Compiler
API 或 tsgo
能够仅生成类型声明文件。
最终类型声明文件输出目录的优先级从高到低为:
tsconfig.json 中的 declarationDir 配置项| 配置项 | 描述说明 |
|---|---|
| dts.bundle | 是否打包类型声明文件。 |
| dts.distPath | 类型声明文件的输出目录。 |
| dts.build | 是否在生成类型声明文件时构建项目的 project references。 |
| dts.abortOnError | 当类型声明文件生成过程中出现错误时,是否中止构建过程。 |
| dts.autoExtension | 是否根据 format 选项自动设置类型声明文件扩展名。 |
| dts.alias | 类型声明文件的路径别名。 |
| dts.tsgo | 是否使用 tsgo 生成类型声明文件。 |
| banner.dts | 在每个类型声明文件顶部注入内容。 |
| footer.dts | 在每个类型声明文件底部注入内容。 |
| redirect.dts.path | 是否自动重定向类型声明文件中的导入路径。 |
| redirect.dts.extension | 是否根据类型声明文件自动重定向文件扩展名到导入路径。 |