TypeScript中使用ws包的WebSocket如何获取error事件信息?
解决ws包中WebSocket Error事件的属性访问问题
你遇到的问题是对error事件回调的参数理解有误——根据@types/ws的定义,这个回调只接收一个参数,这个参数本身是一个包含error、message、type、target属性的对象,而不是多个独立参数。
正确的代码写法
你需要把回调的参数定义为符合类型的对象,然后通过点语法访问它的属性:
this._webSocket.addEventListener("error", (event) => { // 直接访问event的属性 this._logger.error(`WebSocket error encountered: ${event.message}`); this._logger.debug(`Error type: ${event.type}`); this._logger.debug(`Error details: ${event.error}`); });
如果想更明确地标注类型,可以直接使用@types/ws中定义的错误事件类型:
import { ErrorEvent } from 'ws'; // 在回调里指定类型 this._webSocket.addEventListener("error", (event: ErrorEvent) => { this._logger.error(`WebSocket error: ${event.message}`, event.error); });
为什么之前的写法不对?
你尝试的(event, message)这种多参数写法,不符合@types/ws的函数签名定义。类型定义里明确了回调函数只接受一个参数,所有错误相关的信息都包含在这个参数对象内部,所以拆分参数会导致TypeScript提示签名不匹配。
额外调试提示
在处理WebSocket错误时,event.error通常是一个标准的Error对象,你可以进一步访问它的stack属性来获取调用栈信息,方便定位问题:
this._webSocket.addEventListener("error", (event: ErrorEvent) => { this._logger.error(`WebSocket error: ${event.message}`, { error: event.error, stack: event.error?.stack }); });
内容的提问来源于stack exchange,提问作者BnMcG
相关产品推荐
相关产品推荐

