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

TypeScript报错:ErrorRequestHandler类型不存在'message'属性如何解决

问题根因

你误用了ErrorRequestHandler的类型定义:它是Express错误处理中间件整个函数的类型,而非第一个错误参数err的类型。将函数类型赋值给错误实例的类型约束,自然会找不到message、stack等Error实例的属性,和tsconfig的typeRoots、types配置无关,你之前的调整自然无法解决问题。

修复方案

方案1:给整个中间件函数标注类型(更推荐)

直接用ErrorRequestHandler约束函数本身,TS会自动推导所有入参的类型,无需单独给每个参数标注:

import { ErrorRequestHandler } from 'express';

const errorHandler: ErrorRequestHandler = (err, _req, res, _next) => {
  const statusCode = res.statusCode === 200 ? 500 : res.statusCode;
  res.status(statusCode);
  res.json({
    message: err.message,
    stack: process.env.NODE_ENV === 'production' ? undefined : err.stack
  })
}

方案2:单独给err参数标注正确类型

如果要单独给每个参数加类型,err的基础类型是JS内置的Error,如果有自定义错误字段可以扩展类型:

import { Request, Response, NextFunction } from 'express';

// 有自定义错误属性可以写成 err: Error & { statusCode?: number, code?: string }
const errorHandler = (
  err: Error, 
  _req: Request, 
  res: Response, 
  _next: NextFunction
) => {
  // 原有逻辑不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:24:08