排查:npm link包后生命文件报错问题
问题:
npm link @xxx包后,启动项目报错
报错如下:
Try npm install @xxx
if it exists or add a new declaration (.d.ts) file containing `declare module
解决办法:
在src目录下,创建文件tye.d.ts 如何贴代码如下
declare module 'xxx'
原理:
@xxx 库没有提供 TypeScript 的类型声明。
当 import 一个没有类型声明的第三方库时,TypeScript 不知道 import 进来的东西是什么类型,只能偷偷地把它指定成 any 类型,这也就是我们常说的隐式 any(implicit any)。所有正常的前端项目都会禁止 implicit any 出现,所以就报错了。
解决方案 1:安装官方的类型声明
解决方案 2:使用 declare module 语法
根据官方文档,只需要在 TypeScript 的 .d.ts 文件中编写一个空的 declare module,就能把环境包当作 any 类型引入,同时又不会触发 implicit any 报错。
这个操作被文档叫做 Shorthand ambient modules,意为「快速引入环境包」:
引入的模块变量确实是 any 类型,而且这样已经不算是隐式 any 了,所以不会报错。