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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:37:13