新的 TypeScript 版本不包括“window.navigator.msSaveBlob”

Posted

技术标签:

【中文标题】新的 TypeScript 版本不包括“window.navigator.msSaveBlob”【英文标题】:New TypeScript version does not include 'window.navigator.msSaveBlob' 【发布时间】:2021-11-27 19:37:56 【问题描述】:

我有一个 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'.

我应该取消对旧 Internet Explorer 的支持吗?是继续使用那些 IE 特定属性的方法吗?

【问题讨论】:

我会删除对旧 IE 的支持。它们是人们需要更多理由放下的安全噩梦。如果做不到这一点,则不是 TypeScript 本身,而是与 TypeScript 捆绑在一起的 lib.d.ts 和相关文件导致了问题。见github.com/microsoft/TypeScript-DOM-lib-generator/issues/1029 您是否应该删除 IE 支持取决于您/您的公司是否愿意或必须支持它。 (理想情况下,每个人都会删除它。) 【参考方案1】:

我最近遇到了完全相同的问题,我得到的解决方案是在 global 命名空间中扩展 Navigator 接口,因此它仍然包含 msSaveBlob,基于 TypeScript 如何记录 msSaveBlob这里:MSFileSaver

这是我使用的代码:

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


if (navigator.msSaveBlob) 
    // use navigator.msSaveBlob

【讨论】:

我在哪里声明以及如何导入它? 希望您能够将它放在与使用msSaveBlob 相同的文件中,这就是我能够做到的。 TypeScript 对于这样的事情可以去哪里有点固执己见。据我了解,您必须在导入或导出某些内容的文件中使用它。如果不这样做,您将收到编译错误“错误 TS2669:全局范围的增强只能直接嵌套在外部模块或环境模块声明中。” 为我工作谢谢。我只是把它放在组件中的导入之后。【参考方案2】:

我在我的 appmodule.ts 文件中声明了全局命名空间,因为它在多个类似这样的文件中使用

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

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

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

【讨论】:

以上是关于新的 TypeScript 版本不包括“window.navigator.msSaveBlob”的主要内容,如果未能解决你的问题,请参考以下文章

为 TypeScript 文件禁用 ESLint

微软TypeScript 3.0重磅发布!

检查是不是有新的 Windows 版本可用并以编程方式安装

Java 11 , Kotlin , Android Studio, TypeScript 重要更新来了

来了,TypeScript 4.3 发布!

nodejs版本问题