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

TypeScript改造Node.js后端时HTTP Server错误事件类型报错求助

解决Node.js HTTP Server Error事件的TypeScript类型问题

嘿,我之前用TypeScript重构Node.js后端时也碰到过一模一样的问题!确实,标准的Error类型只包含message、name这类基础属性,完全覆盖不了Node.js系统错误里的syscall、code这类特有字段。

其实Node.js的官方类型定义里已经为这类系统错误提供了专门的类型——NodeJS.ErrnoException,它继承了标准Error,同时扩展了Node特有的错误属性,刚好能匹配HTTP Server error事件抛出的错误对象。

直接指定类型断言

最简单的方式就是在回调函数里给错误参数指定NodeJS.ErrnoException类型:

import http from 'http';

const server = http.createServer((req, res) => {
  // 你的请求处理逻辑
});

server.on('error', (err: NodeJS.ErrnoException) => {
  console.error(`服务器启动失败: ${err.message}`);
  if (err.syscall) {
    console.error(`关联系统调用: ${err.syscall}`);
  }
});

用类型守卫做更安全的处理

如果你不想直接用类型断言,也可以用类型守卫让TypeScript自动推断类型,这样更严谨:

server.on('error', (err) => {
  console.error(`错误信息: ${err.message}`);
  
  // 检查是否包含syscall属性,TypeScript会自动推断为NodeJS.ErrnoException
  if ('syscall' in err) {
    console.error(`系统调用名称: ${err.syscall}`);
    console.error(`错误码: ${err.code}`);
  }
});

这个类型是@types/node包(Node.js官方类型定义)里自带的,只要你初始化TypeScript Node项目时安装了这个包,就能直接使用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:17:03