【问题标题】:Polyfill type definitions not getting picked upPolyfill 类型定义没有被拾取
【发布时间】:2021-12-31 07:10:31
【问题描述】:

我正在使用 TypeScript 4.4.4,并尝试在我的前端 (React) 中使用这个 EventSource polyfill:https://github.com/EventSource/eventsource。我还安装了该包的类型定义。

我特别需要向 SSE 启动添加标头:eventSourceRef.current = new EventSource('/api/foo', { headers: { bar: 'buzz' } });。不幸的是,没有选择类型定义。如果我尝试将 headers 作为属性添加到 EventSourceInit 选项,TypeScript 会报错,这意味着仍在使用 EventSource 中烘焙的类型,而不是 polyfill 定义。

我怀疑这可能与 polyfill 包没有导出类本身有关,因此我无法导入该类。我必须导入整个包,像这样:import 'eventsource/lib/eventsource-polyfill';

我尝试了以下方法:

  • 在我的入口文件中导入polyfill
  • 仅在我需要的文件中导入 polyfill
  • 导入类型定义参考:/// <reference path='../../../../../node_modules/@types/eventsource/index.d.ts'/>
  • 扩展全局类型并尝试使用 polyfill 允许的新属性扩展 EventSourceInit 接口,如下所示:
export {};
declare global {
    interface EventSourceInit {
        headers?: object | undefined;
    }
}

我意识到我总是可以将其转换为 any 或使用 require 导入,但我觉得如果有为此的类型定义,应该可以在我的项目中使用它们。

我在这里错过了什么?

编辑: 我也尝试了以下方法,但也没有任何效果:

  • 如类型定义测试所示导入包:import EventSourcePolyfill = require("eventsource/lib/eventsource-polyfill");。这不起作用,因为我的目标是 ECMAScript 模块。
  • 像这样导入它:import EventSourcePolyfill from "eventsource/lib/eventsource-polyfill";。但是,当调用构造函数 (const foo = new EventSourcePolyfill('/foo)) 时,TypeScript 会抱怨表达式不可构造,因为“Type 'typeof EventSource' 没有构造签名”。

【问题讨论】:

    标签: typescript typescript-definitions


    【解决方案1】:

    唉……我找到了路。我开始在表达式中输入EventEmitter 类,我注意到智能感知提示该类来自包。显然,这是导入它的方式:

    import EventSource from 'eventsource';

    我一直在尝试按照包 README 中的说明导入“eventsource/lib/eventsource-polyfill”:

    只需将 example/eventsource-polyfill.js 文件添加到您的网页:

    <script src=/eventsource-polyfill.js></script>

    我对此感到困惑并尝试导入错误的内容。但显然只导入包索引就足够了。我想最简单的答案确实是最好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-10
      • 2016-09-05
      • 2015-01-10
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      相关资源
      最近更新 更多