使用Rollup实现生成TypeScript类型
背景
已有项目的.d.ts
文件是手动维护的, 虽然比较多老旧的js
库的类型定义也是手动维护, 但是我们是直接使用ts
来开发我们的库的, 所以需要一种自动化和现代的方案来生成我们库的定义文件
tsc --declaration
能生成.d.ts
文件, 但是这些文件是分散的, 使用起来并不友好- 使用dts-generator或dts-bundle将所有的
.d.ts
文件打包成一个, 但是都不是官方方案, 而且比较老旧, 处于不活跃状态 - 研究过很多项目后, 发现了一个神器:
api-extractor
, 微软官方出品维护, 可以合并.d.ts
文件, 还能做到lint
的效果, 检查代码中的错误
使用
使用api-extractor
的相关资料并不多, 所以最后决定直接参考官方文档来实现, 按文档说明流程非常简单
flowchart TD
A(ts源码) --> |tsc|B(多文件.d.ts)
B --> |api-extractor|C(单文件.d.ts)
配置api-extractor
其中messages
字段是一些错误提示忽略的配置, 类似于eslint
的rule
, 有些想忽略的warning
就可以在这里配置以后保证lint
检查是成功的
1 | // api-extractor.json |
编译脚本
在package.json
里加上相关命令, 就可以直接生成.d.ts
文件了
1 | { |
使用
生成完成后, 可以看到dist
目录下的结构就非常清晰了, 只剩下五份文件:
lib.es5.js
lib.es5.js.map
lib.umd.js
lib.umd.js.map
lib.es5.d.ts
然后就可以在demo
的react
里很舒服的直接使用ts
类型了, 和使用其他库的效果一样.
1 | import LibSDK, { SDKOptions } from '../dist/lib.es5'; |
使用Rollup实现生成TypeScript类型
https://mosby-zhou.github.io/2020/06-01-rollup-typescript-api-extractor/