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

TypeScript中Express自定义类型中间件类型报错如何解决?

你遇到的类型报错是因为自定义的IGetUserAuthInfoRequest是独立于Express原生Request的派生接口,不符合Express对标准中间件的RequestHandler类型入参要求,因此出现类型不匹配的问题。

解决方案:通过类型声明合并扩展Express原生Request接口

不需要自定义派生接口,直接通过TypeScript的声明合并能力,给Express自带的Request接口追加你需要的id属性即可,步骤如下:

  1. 新建类型声明文件
    在项目源码目录下新建@types/express.d.ts文件,写入如下内容:
declare namespace Express {
  interface Request {
    // 在此处追加你需要扩展的所有自定义请求属性
    id: number
  }
}
  1. 配置tsconfig.json识别自定义类型
    在tsconfig.json的compilerOptions字段中添加typeRoots配置,确保TypeScript能读取到你自定义的类型声明:
{
  "compilerOptions": {
    // 其他原有配置保留
    "typeRoots": ["./node_modules/@types", "./src/@types"]
  }
}
  1. 调整原有代码的类型引用
    不需要再使用自定义的IGetUserAuthInfoRequest接口,所有位置直接引用Express自带的Request类型即可:
  • 中间件代码调整:
import { Request, Response, NextFunction } from "express";

export const verifyToken = (req: Request, res: Response, next: NextFunction) => {
    req.id = 1; // 类型合法,会正常提示id属性的类型
    next(); 
}
  • 路由代码调整:
app.get("/api/try/admin", verifyToken, (req: Request, res: Response) => {
    // 此处访问req.id也会有正确的类型提示
    res.json({message: "try admin"})
});

该方案全程不需要用到any,所有自定义属性都有完整的类型校验和提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:48:00