我正在尝试在Typescript中使用EventSource
,但是当使用命名事件时无法正确地为响应类型进行定义。
我尝试过:
const evtSource = new EventSource('/my-url');
const parseMyEvent = (evt: Event) => {
const data: MyDataInterface = JSON.parse(evt.data);
console.log(data)
}
evtSource.addEventListener('my-event', parseMyEvent);
失败了,因为 Event
没有 data 属性。
const evtSource = new EventSource('/my-url');
const parseMyEvent = (evt: MessageEvent) => {
const data: MyDataInterface = JSON.parse(evt.data);
console.log(data)
}
evtSource.addEventListener('my-event', parseMyEvent);
出现错误信息"No overload matches this call.",在evtSource.addEventListener('my-event', parseMyEvent)
处失败。
我知道MessageEvent
是一个泛型接口,但我应该使用什么作为它的类型?
我正在使用TS 3.5.3,所以我尝试安装外部类型@types/eventsource
,但没有成功(我知道这是用于polyfill EventSource库,但我还是试了)。
当使用泛型evtSource.onMessage = fn
时,它可以正常工作而没有任何问题。
应该可以在TS中对EventSource事件的监听器/响应进行类型化,但是如何做呢?
EventSource.addEventListener
有一个泛型:addEventListener <K extends keyof EventSourceEventMap>(type: K, ....
但它只接受"error" | "message" | "open"
,所以并没有太多帮助。 - Linda Paiste