【问题标题】:New TypeScript version does not include 'window.navigator.msSaveBlob'新的 TypeScript 版本不包括“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 支持取决于您/您的公司是否愿意或必须支持它。 (理想情况下,每个人都会删除它。)

标签: typescript dependencies


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2016-12-26
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多