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

在Express中为Response对象扩展全局方法的TypeScript正确实现

在Express + TypeScript中全局扩展Response的success方法

要给Express的Response对象添加全局success方法,直接自定义类型传入中间件会触发类型不匹配错误,正确的做法是通过扩展Express内置类型声明来实现:

步骤1:扩展Express的Response接口

创建类型声明文件(比如src/types/express.d.ts),通过TypeScript的模块扩展特性,给内置的Response接口添加success方法:

import { Response } from 'express';

// 定义success方法的参数类型
interface BaseParams {
  code?: number;
  message?: string;
  result?: any;
}

// 扩展Express的Response接口
declare module 'express' {
  interface Response {
    success: (params: BaseParams) => Response;
  }
}

步骤2:实现全局中间件

此时直接使用Express内置的Response类型即可,TypeScript会自动识别扩展后的属性:

import express, { Request, Response, NextFunction } from 'express';
const app = express();

app.use((_req: Request, res: Response, next: NextFunction) => {
  res.success = function ({ result = {}, code = 200, message = "" }) {
    return res.json({ result, code, message });
  };
  next();
});

关键说明

之前自定义CustomResponse并传入中间件的方式会报错,原因是app.use的中间件参数要求response必须是Express内置的Response类型,无法直接替换为自定义类型。通过模块扩展的方式,我们直接修改了TypeScript对Express内置Response类型的认知,既满足类型校验,又能实现全局方法的添加。

确保类型声明生效

检查tsconfig.json,确保类型声明文件被编译器识别:

{
  "compilerOptions": {
    "typeRoots": ["./node_modules/@types", "./src/types"]
  }
}

内容的提问来源于stack exchange,提问作者GianPierre Gálvez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:15:30