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

fkvaft9z  于 2023-04-05  发布在  Node.js
关注(0)|答案(3)|浏览(933)

我已经使用了这个msSaveOrOpenBlob方法。它工作正常,但更新后的 typescript 到最新版本,我得到多个错误有两个错误。
window.navigator.msSaveOrOpenBlob(data,filename);
错误TS 2322:类型“Promise〈〉”不能分配给类型“IMomise〈〉”。
那是什么?

xtfmy6hx

xtfmy6hx1#

@Heretic Monkey的答案是正确的,但是如果你只是想解决这个问题--因为你使用的是TypeScript --你可以在调用msSaveOrOpenBlob之前将其强制转换为any类型。
(window.navigator as any).msSaveOrOpenBlob(data, filename);
此外,您应该首先确保navigator对象确实具有该方法,因此:

const nav = (window.navigator as any);
if (nav.msSaveOrOpenBlob) {
  nav.msSaveOrOpenBlob(data, filename);
}
gorkyyrv

gorkyyrv2#

msSaveOrOpenBlob是Microsoft为Internet Explorer添加的Navigator对象的专有附加项。由于Microsoft正在逐步淘汰对Internet Explorer的支持,因此它已经删除了对TypeScript附带的lib.dom.d.ts和lib.es*.d.ts文件的许多非标准附加项的支持。请参见this GitHub issue about the changes to the DOM.d.ts file
this GitHub issue on the subject中所示,您必须使用declaration merging自己将这些类型添加到Navigator中。

cygmwpex

cygmwpex3#

这是我第一次在Angular 更具体的发展12版本,我创建了一个组件中的方法,做一个下载xlsx文件,在Chrome中它的工作,但在IE中它不工作,我发现添加这行window.navigator.msSaveOrOpenBlob(data, filename);资源管理器可以下载文件,但在VSC标记错误,它是
类型“Navigator”上不存在属性“msSaveOrOpenBlob”
我在tsconfig.json中修改了模块和库,

"module": "es2020",
"lib": [
    "es2020",
    "dom"
]

致:

"module": "es2015",
"lib": [
    "es2015",
    "dom"
]

在代码window.navigator.msSaveOrOpenBlob VSC中标记相同
属性'msSaveOrOpenBlob'....'
但是当我执行ng服务它的工作并在IE和Chrome中下载xlsx文件时。

相关问题