You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中WebSocket Observer类型不兼容编译错误解决方案求助

解决TypeScript中Observer类型不匹配的编译错误

错误原因

RxJS的Observer<T>类型对属性有明确约束:

  • error必须是(err: any) => void类型的函数
  • complete必须是() => void类型的函数

你将这两个属性赋值为null,不符合类型要求,导致编译报错。

修改方案

方案一:提供空实现函数(推荐)

直接给error和complete添加空函数,完全满足Observer类型的约束:

let observer = {
    error: (err: any) => {},
    complete: () => {},
    next: (data: Object) => {
        console.log('Message sent to websocket: ', data);
        if (ws.readyState === WebSocket.OPEN) {
            ws.send(JSON.stringify(data));
        }
    }
};
return new AnonymousSubject<MessageEvent>(observer, observable);

方案二:使用Partial类型配合类型断言

如果不需要实现空函数,可以用Partial<Observer<T>>允许属性可选,再通过类型断言转换为Observer<T>:

let observer: Partial<Observer<MessageEvent>> = {
    next: (data: Object) => {
        console.log('Message sent to websocket: ', data);
        if (ws.readyState === WebSocket.OPEN) {
            ws.send(JSON.stringify(data));
        }
    }
};
return new AnonymousSubject<MessageEvent>(observer as Observer<MessageEvent>, observable);

额外提示

注意next函数的参数类型:你当前定义为data: Object,但Observer<MessageEvent>的next方法预期接收MessageEvent类型参数。如果你的场景是发送普通对象而非WebSocket的MessageEvent,建议调整AnonymousSubject的泛型参数为对应的数据类型,比如:

return new AnonymousSubject<Object>(observer, observable);

内容的提问来源于stack exchange,提问作者Rick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:47:11