You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新TypeScript到4.4.4后npm run build提示Navigator无msSaveOrOpenBlob属性如何解决

报错原因

msSaveOrOpenBlob是IE、旧版Edge专属的非标准浏览器API,TypeScript 4.4及以上版本的官方标准类型库中,已经从Navigator接口的定义里移除了该非标准属性的声明,因此编译时会抛出TS2339类型错误。

解决方案

可根据你的项目使用场景选择以下任意一种方案:

方案1:单次使用临时类型断言

仅在当前调用处绕过类型校验,适合仅用到1-2次该API的场景:

if ((navigator as any).msSaveOrOpenBlob) { 
  (navigator as any).msSaveOrOpenBlob(blob, fileName); 
}

方案2:扩展全局Navigator类型(推荐)

在项目全局类型声明文件(通常为global.d.ts或typings.d.ts,需确保该文件在tsconfig.json的include配置范围内)中添加以下声明,全局生效:

interface Navigator {
  /** IE/旧Edge专属Blob导出API */
  msSaveOrOpenBlob?: (blob: Blob, fileName?: string) => boolean;
}

添加后原代码无需任何修改即可正常编译,还能保留该API的类型提示。

方案3:自定义类型守卫

不想使用any也不想修改全局声明时,可以用类型守卫实现类型收窄,完全符合TypeScript类型规范:

// 先定义类型守卫方法
function supportMsSaveBlob(nav: Navigator): nav is Navigator & { msSaveOrOpenBlob: (blob: Blob, fileName?: string) => boolean } {
  return 'msSaveOrOpenBlob' in nav;
}

// 调用处代码
if (supportMsSaveBlob(navigator)) {
  navigator.msSaveOrOpenBlob(blob, fileName);
}

内容的提问来源于stack exchange,提问作者Nick Grava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:24:03