新的TypeScript版本不包括“窗口.导航器.msSaveBlob”

e5nszbig  于 2023-03-04  发布在  TypeScript
关注(0)|答案(2)|浏览(724)

我有一个TypeScript项目(https://github.com/jmaister/excellentexport),它运行良好。
添加dependabot进程后,建议升级typescript:

Bump typescript from 4.3.4 to 4.4.3

但是,由于我维护的库引用了Internet Explorer的旧Internet Explorer属性,因此无法使用新版本进行构建。
以下是生成错误的示例:

src/excellentexport.ts:143:30 - error TS2339: Property 'msSaveBlob' does not exist on type 'Navigator'.
143         if (window.navigator.msSaveBlob) {
                                 ~~~~~~~~~~
src/excellentexport.ts:145:30 - error TS2339: Property 'msSaveBlob' does not exist on type 'Navigator'.
145             window.navigator.msSaveBlob(blob, filename);
                                 ~~~~~~~~~~
src/excellentexport.ts:278:34 - error TS2339: Property 'msSaveBlob' does not exist on type 'Navigator'.

我应该删除对旧IE的支持吗?这是继续使用IE特定属性的方法吗?

wribegjk

wribegjk1#

我最近遇到了完全相同的问题,我得到的解决方案是在global名称空间中扩展Navigator接口,以便它仍然包括msSaveBlob,这是基于TypeScript在以下位置记录msSaveBlob的方式:MS文件保存程序
下面是我使用的代码:

declare global {
    interface Navigator {
        msSaveBlob?: (blob: any, defaultName?: string) => boolean
    }
}

if (navigator.msSaveBlob) {
    // use navigator.msSaveBlob
}
zpqajqem

zpqajqem2#

我在appmodule.ts文件中声明了全局名称空间,因为它在多个文件中使用,如下所示

declare global{
 interface Navigator{
    msSaveBlob:(blob: Blob,fileName:string) => boolean
    }
 }

调用文件看起来像这样**//它抛出了您提到的构建错误,

if (navigator.msSaveBlob) {
   // IE 10+
   navigator.msSaveBlob(blob, fileName);
}

相关问题