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
相关产品推荐
相关产品推荐

