TypeScript升级到4.4.4后报TS2339、TS2322错误该如何解决?
该报错是因为TypeScript 4+的标准类型定义库移除了微软系非标准API的内置声明,你可以通过两种方式修复:
- 单次调用临时兼容:使用
any类型断言绕开校验,代码示例:(window.navigator as any).msSaveOrOpenBlob(data, filename) - 全局类型声明:在项目的全局类型定义文件(通常命名为
typings.d.ts或global.d.ts)中扩展Navigator接口,后续所有调用都不会触发报错:interface Navigator { msSaveOrOpenBlob?: (blob: Blob, defaultFileName?: string) => boolean }
问题2:TS2322 报错:Type 'Promise<>' is not assignable to type 'IPromise<>'
该报错是因为TypeScript 4.4强化了类型兼容性校验,IPromise通常是旧第三方库(如早期AngularJS、自定义异步封装)定义的非标准Promise接口,和ES内置的Promise类型不再自动兼容,修复方案如下:
- 若
IPromise为项目自定义类型:直接修改接口定义继承内置Promise即可:interface IPromise<T> extends Promise<T> {} - 若
IPromise来自第三方依赖:优先升级对应依赖到支持TypeScript 4.4+的版本,官方通常已适配类型兼容问题。 - 临时兼容方案:赋值时添加双重类型断言绕开校验:
const target: IPromise<YourType> = originPromise as unknown as IPromise<YourType>
内容的提问来源于stack exchange,提问作者amethianil
相关产品推荐
相关产品推荐

