本章介绍什么是 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 | 是否根据类型声明文件自动重定向文件扩展名到导入路径。 |