导出vite.js的声明文件
#javascript #教程 #typescript #vite

javaScript不是静态打字的语言。 Typescript给您一种幻想,即开发过程中存在类型,但是一旦将其编译成JavaScript,所有这些都消失了。这就是为什么您需要像Zod这样的库进行运行时类型检查。

TypeScript is Fake

当您想与他人共享您在打字稿中编写的库/软件包时,您需要生成并包含一个单独的类型声明文件(在.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中的构建过程可能会使所有可用的不同工具和选项混淆。希望本文可以帮助使其变得更加容易。