在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版本:
image.png
6.5的版本比较合适,6.9就不行。一般npm包默认安装后,会做小版本自动升级,可见6.9.4已经是只兼容ts3.1了,如果安装6.9.2自动升级后就歇菜了。
这种降单个包的方式比较保险,对于老项目,安装的很多包版本都比较旧,如果升级框架或者ts版本,可能出现某些包不兼容的情况。

在老项目里安装新包或提升包版本,对于Cannot find name 之类的ts类型报错,想都不用想是版本兼容问题。甚至可以不用上网查,直接尝试安装低版本的包没准问题就好了。


cp1001
20 声望0 粉丝