在angular我的项目中引入qs解决url的query局部参数。
因qs库是纯js,引入类型定义库@types/qs显示代码提醒:

npm i qsnpm 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类型报错,想都不必想是版本兼容问题。甚至能够不必上网查,间接尝试装置低版本的包没准问题就好了。