将 typescript ^3.7.2 更新为最新的“typescript”后:“^4.4.4” - 错误 TS2339:类型“Navigator”上不存在属性“msSaveOrOpenBlob”

ame*_*nil 19 node.js typescript

我已经使用了这个 msSaveOrOpenBlob 方法。它工作正常,但将打字稿更新到最新版本后,我收到多个错误,有两个错误。

window.navigator.msSaveOrOpenBlob(数据, 文件名);

错误 TS2322:类型“Promise<>”无法分配给类型“IPromise<>”。

解决办法是什么?

MMa*_*lke 42

@Heretic Monkey 的答案是正确的,但如果你只是想解决这个问题 - 因为你使用的是 TypeScript - 你可以any在调用 msSaveOrOpenBlob 之前将其转换为类型。

(window.navigator as any).msSaveOrOpenBlob(data, filename);

另外,您应该首先确保导航器对象确实具有该方法,因此:

const nav = (window.navigator as any);
if (nav.msSaveOrOpenBlob) {
  nav.msSaveOrOpenBlob(data, filename);
}
Run Code Online (Sandbox Code Playgroud)


Her*_*key 10

msSaveOrOpenBlobNavigator是Microsoft 为 Internet Explorer 添加的该对象的专有附加内容。由于 Microsoft 正在逐步取消对 Internet Explorer 的支持,因此它也删除了对 TypeScript 附带的 lib.dom.d.ts 和 lib.es*.d.ts 文件中的许多非标准添加的支持。请参阅此 GitHub 问题,了解有关 DOM.d.ts 文件的更改

正如有关该主题的 GitHub 问题中所指出的,您必须使用声明合并来向自己添加这些类型Navigator


小智 0

这是我在 12 版本中更具体的角度的第一次开发,我在一个组件中创建了一个方法来下载 xlsx 文件,在 Chrome 中它可以工作,但在 IE 中它不起作用,我发现添加这一行资源管理器window.navigator.msSaveOrOpenBlob(data, filename);可以下载文件,但在VSC中标记错误,它是

类型“Navigator”上不存在属性“msSaveOrOpenBlob”

我更改了模块和库tsconfig.json

"module": "es2020",
"lib": [
    "es2020",
    "dom"
]
Run Code Online (Sandbox Code Playgroud)

到:

"module": "es2015",
"lib": [
    "es2015",
    "dom"
]
Run Code Online (Sandbox Code Playgroud)

在代码window.navigator.msSaveOrOpenBlobVSC中标记相同

属性“msSaveOrOpenBlob”....”

但是当我执行 ng 时,它会工作并在 IE 和 Chrome 中下载 xlsx 文件。

  • 这似乎是另一个问题,或者至少是“我也有这个问题评论”,因为它肯定没有回答如何消除错误的问题......这在我的答案中得到了回答,并带有其他答案中的解决方法。 (3认同)