共计 735 个字符,预计需要花费 2 分钟才能阅读完成。
在 angular 我的项目中引入 qs 解决 url 的 query 局部参数。
因 qs 库是纯 js,引入类型定义库 @types/qs 显示代码提醒:
npm i qs
npm i @types/qs -D
装置后我的项目应用库:
import * as qs from 'qs';
let queryStr:string = qs.stringify(reqParams);
此时编译代码会报错:
index.d.ts(61,101): error TS2304: Cannot find name 'unknown'
看看这个 d.ts 报错处的代码:
function parse(str: string | Record<string, string>, options?: IParseOptions): {[key: string]: unknown };
unknown 在 ts 里作为一种类型,是 ts3+ 反对的个性。但我的我的项目依赖的 ts 版本是 2.9.2,所以不反对这个语法。
晓得起因就解决了一半的问题,有 2 种解决思路:
1. 降级 typescript 到新版本;
2. 降 @types/qs 版本,不要超过我的项目所依赖的 ts 版本;
说降落 @types/qs 版本的形式。在 npmjs 网站能够清晰看到该包兼容的 ts 版本:
6.5 的版本比拟适合,6.9 就不行。个别 npm 包默认装置后,会做小版本主动降级,可见 6.9.4 曾经是只兼容 ts3.1 了,如果装置 6.9.2 主动降级后就歇菜了。
这种降单个包的形式比拟保险,对于老我的项目,装置的很多包版本都比拟旧,如果降级框架或者 ts 版本,可能呈现某些包不兼容的状况。
在老我的项目里装置新包或晋升包版本,对于 Cannot find name 之类的 ts 类型报错,想都不必想是版本兼容问题。甚至能够不必上网查,间接尝试装置低版本的包没准问题就好了。