当前位置: 代码网 > it编程>编程语言>Javascript > 在 TypeScript 中导入 JavaScript 包,解决声明文件报错问题

在 TypeScript 中导入 JavaScript 包,解决声明文件报错问题

2024年08月02日 Javascript 我要评论
在使用 TypeScript 时,时常会遇到 Could not find a declaration file for module, …… implicitly has an 'any' type. 的报错,本文分析了报错原因,并给出了解决方案。

前言

如果你在 typescript 中引入了一个纯 javascript 包,那很有可能会看到这样的报错:

问题剖析

最近我在编写管理界面,使用了 vuetify-jsonschema-form 库来生成表单,可惜这个库有各种缺点,其中之一就是没有提供 typescript 的类型声明

当 import 一个没有类型声明的第三方库时,typescript 不知道 import 进来的东西是什么类型,只能偷偷地把它指定成 any 类型,这也就是我们常说的隐式 any(implicit any)。所有正常的前端项目都会禁止 implicit any 出现,所以就报错了。

如果你在网上搜索,网上的文章很可能会让你用这些方法:

  • 关掉 implicit-any 的检查
  • 在 import 语句上加上 // @ts-ignore

这些方法非常不推荐使用,因为这样一来我们就远离了 typescript 给我们的保护,给项目引入了定时炸弹。那么怎么办呢?有两种方法:

解决方案 1:安装官方的类型声明

一般来说,如果你用的是 lodash 这种大库,那么官方已经帮你写好类型声明了,只要按照这个库的官方文档,安装 @types/库名 这个库就行了。比如,使用 lodash 库的时候,只需要安装它的类型声明库:

npm install --save-dev @types/lodash

解决方案 2:使用 declare module 语法

但是,显然不是每个库都能有这种待遇。如果你用的是小库,而且官方文档里又没说怎么安装类型声明,那就只能自己动手了。

错误信息里面,有这样的一句话:

这是什么意思呢?根据官方文档,只需要在 typescript 的 .d.ts 文件中编写一个空的 declare module,就能把环境包当作 any 类型引入,同时又不会触发 implicit any 报错。这个操作被文档叫做 shorthand ambient modules,意为「快速引入环境包」:

shorthand ambient modules 语法说明

那么实际使用时要怎么做呢?我们首先在项目的任意位置建立一个 js-modules.d.ts 文件,向里面填入如下内容:

declare module '【import 的第三方库名】';

接下来可以试着重启一下 ide,看看报错是不是已经消除了。我们来尝试一下,用 declare module 声明了 vuetify-jsonschema-form 库,然后我们观察一下引入的变量类型:

引入的变量类型是 any

可以看出,引入的模块变量确实是 any 类型,而且这样已经不算是隐式 any 了,所以不会报错。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com