【发布时间】: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