问题
项目使用qrcode在前端生成二维码图片。
qrcode是一个JavaScript库,我的前端项目使用了TypeScript,无法直接使用。
自己尝试为它编写TypeScript的类型定义,没有成功。
后面才发现有官方的TypeScript支持:@types/qrcode
引入@types/qrcode
后,项目build失败。错误信息:
245:5 Type 'Timeout' is not assignable to type 'number'.
经过检查,发现是@types/qrcode
引入了node依赖,node的setTimeout
覆盖了DOM的setTimeout
。
解决方案
通过在网上搜索,找到了解决方案。
此方案可以为任意三方JS库添加TypesScript类型定义。
1.创建文件夹
创建src/types/qrcode
文件夹
2.编写TypesScript声明文件
直接将@types/qrcode
的文件index.d.ts
拷贝,删除不必要的内容。
3. 修改tsconfig.json文件
3.1 在typeRoots
属性添加自己的types文件夹。
"compilerOptions" : {
...
"typeRoots": [
"node_modules/@types",
"src/types"
]
}
3.2 在paths
属性添加三方库的别名
{
"compilerOptions" : {
...
"paths":{
"qrcode": ["./src/types/qrcode"]
}
}
}
3.3 排除types文件夹,防止被编译
"exclude": [
"node_modules",
"src/types/**"
]