如何在无JSDoc时为Rollup插件的.js文件生成.d.ts类型声明
不依赖JSDoc为Rollup插件JS文件生成.d.ts类型声明的方法
像rollup-plugin-commonjs这类纯JS编写的Rollup插件,之所以能提供.d.ts类型声明,核心是手动编写类型文件,当然也可以借助工具辅助生成后优化,具体方法如下:
1. 手动编写类型声明(推荐,也是官方插件的做法)
对于Rollup插件这种API结构明确但配置项复杂的场景,手动写类型声明是最靠谱的方式:
- 先理清插件的导出逻辑:比如rollup-plugin-commonjs的默认导出是一个接收配置参数的函数,返回符合Rollup插件规范的对象(包含name、transform、resolveId等钩子)
- 复用Rollup官方的类型:Rollup本身提供了
Plugin等核心类型,直接引入就能复用,不用自己重复定义插件的基础结构 - 编写.d.ts示例:
import type { Plugin } from 'rollup'; // 定义插件的配置项类型 export interface CommonjsOptions { include?: string | RegExp | (string | RegExp)[]; exclude?: string | RegExp | (string | RegExp)[]; extensions?: string[]; // 其他配置项根据插件实际功能补充 } // 定义插件函数的类型 declare function commonjs(options?: CommonjsOptions): Plugin; export default commonjs;
- 最后在package.json里指定类型文件路径:
"types": "dist/index.d.ts",这样TS就能自动识别
2. 用工具生成基础类型后手动修正
如果不想从零开始写,可以先用工具生成初步的.d.ts,再调整细节:
- 用
dts-gen:这是专门生成类型声明的工具,安装后执行dts-gen -m 你的插件包名就能生成基础类型 - 用TypeScript的
tsc命令:执行tsc --allowJs --declaration --emitDeclarationOnly src/index.js,TS会通过类型推断生成对应的.d.ts - 注意:自动生成的类型经常会有不准确的地方(比如把可选参数标成必填、复杂函数的重载没处理好),必须手动检查修正后才能用
为什么这类插件不用JSDoc?
成熟的Rollup插件更愿意手动写类型,原因很简单:
- 手动编写的类型更精准,能覆盖所有边缘场景和自定义配置
- 不会让JS文件被大量JSDoc注释塞满,保持源码简洁
- 类型声明和实现分离,更新插件功能时同步修改类型文件更方便
内容的提问来源于stack exchange,提问作者lwtfy
相关产品推荐
相关产品推荐

