gpt4 book ai didi

typescript - EventSource 使用 TypeScript 命名事件

转载 作者:行者123 更新时间:2023-12-04 11:26:10 25 4
gpt4 key购买 nike

我正在尝试使用 EventSource typescript 但在使用命名事件时无法正确键入响应。
我试过

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没有房产 数据
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);
失败 evtSource.addEventListener('my-event', parseMyEvent) , 带有“没有与此调用匹配的过载。
”。
我知道 MessageEvent是一个通用接口(interface),但我应该使用什么作为它的类型?
我使用的是 TS 3.5.3 所以我尝试安装外部类型 @types/eventsource也没有运气(我知道,它是针对 polyfill EventSource 库的,但我试过了)
使用通用时 evtSource.onMessage = fn它没有任何问题
应该可以在 TS 中键入 EventSource 事件的监听器/响应,但是如何呢?

最佳答案

下面的代码应该可以工作。基本上,您使用的是 TypeScript 的 Type assertions让编译器相信你,底层事件实际上是一个 MessageEvent 类型的对象。 :

const evtSource = new EventSource('/my-url');

const parseMyEvent = (evt: Event) => {
const messageEvent = (evt as MessageEvent); // <== This line is Important!!
const data: MyDataInterface = JSON.parse(messageEvent.data);
console.log(data)
}

evtSource.addEventListener('my-event', parseMyEvent);

关于typescript - EventSource 使用 TypeScript 命名事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66465969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com