javaScript不是静态打字的语言。 Typescript给您一种幻想,即开发过程中存在类型,但是一旦将其编译成JavaScript,所有这些都消失了。这就是为什么您需要像Zod这样的库进行运行时类型检查。
当您想与他人共享您在打字稿中编写的库/软件包时,您需要生成并包含一个单独的类型声明文件(在.d.ts
中结束),以便其他开发人员可以在开发过程中访问您的类型定义。 (您还需要在指向该文件的"package.json"
中添加"types"
条目)
1. tsconfig.json
的局限性
在运行tsc --init
命令后生成的tsconfig.json
文件中(默认情况下是在vite.js等许多库中出现的),您可以在许多库中生成"declaration"
,"declarationDir"
等的声明文件,等等。
但是,如果您只使用此文件中可用的选项,例如:
,您将遇到限制和问题。- 不能仅生成特定文件的声明文件
"include"
选项用于将整个项目中的文件不仅仅是键入声明生成。因此,如果您将其他文件排除(仅将其设置为您需要声明的文件),那么这些文件根本不会通过Typescript看到,您会遇到很多错误。
- 无法重命名/修改生成的声明文件
当您的项目增长时,您可能需要将您的类型定义分开为像types/types.ts
这样的另一个文件,并将其导入主文件。但是,当构建/运输时,您希望所有类型都位于dist
文件夹根部的index.d.ts
文件中。您无法使用tsconfig.json
2. vite-plugin-dts进行营救
有一个名为koude13 for vite.js的插件,它使生成声明文件变得更加容易。
- 安装
您可以通过运行此命令来安装它:
npm i vite-plugin-dts -D
然后在您的vite.config.ts
文件中添加以下行:
import dts from 'vite-plugin-dts';
// add dts() to the plugins array
plugins: [react(), dts()],
- 生成特定文件的声明
默认情况下,将为所有文件生成声明文件,但您可以使用include
选项将其限制为特定文件:
dts({
include: ['path/to/file.ts'],
}),
- 重命名/修改生成的声明文件
您可以将生成的文件重命名为其他内容,甚至可以通过使用beforeWriteFile
选项来修改内容。您可以传递一个函数,该函数占两个参数(filePath: string, content: string)
并返回具有相同名称属性{filepath: 'new/path/to/file.d.ts', content: 'newContent'}
的对象。如果您返回false
,则文件将被跳过。
dts({
beforeWriteFile: (filePath, content) => ({
filePath: filePath.replace('path/to/file.d.ts', 'index.d.ts'),
content,
}),
}),
- 更改输出目录
您可以使用outDir
选项将声明文件的生成限制为特定目录。 (您也可以使用tsconfig.json
中的选项来实现此目标)
dts({
outDir: 'dist',
}),
您还有更多可用的选项可以在documentation
中检查一下JavaScript/Typescript中的构建过程可能会使所有可用的不同工具和选项混淆。希望本文可以帮助使其变得更加容易。