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

TypeScript扩展Express Request重写signedCookies类型失效报错

问题根因

自定义属性address、file扩展生效,但signedCookies类型覆盖失败的核心原因有两点:

  • Express的Request类型实际定义在依赖包@types/express-serve-static-core中,而非@types/express包本身
  • TypeScript接口合并规则中,新增原接口不存在的字段会直接追加,不会有冲突;但signedCookies是原接口已经明确定义为any的字段,你在Express全局命名空间下写的同名字段定义,优先级低于express-serve-static-core中的原始定义,因此无法覆盖。之前尝试的重定义方式要么路径不对,要么不符合TS模块扩充规则,所以全部失效。
修复步骤
  1. 替换原有./src/@types/express/index.d.ts的内容,改为针对express-serve-static-core模块的类型扩充,代码如下:
import 'express-serve-static-core';

declare module 'express-serve-static-core' {
  interface Request {
    address?: Record<string, unknown>;
    file?: Express.Multer.File;
    signedCookies: Record<string, string>;
    // 若业务中存在解析后非字符串的cookie值,可将类型改为Record<string, unknown>
  }
}
  1. 现有tsconfig.json的typeRoots配置已经正确包含src/@types目录,无需额外修改。
  2. 重启TypeScript服务(VS Code环境可通过快捷键Ctrl+Shift+P调出命令面板,选择「TypeScript: Restart TS Server」执行),原ESLint的no-unsafe-assignment报错就会消失。
无效场景排查

如果按上述步骤修改后仍有报错,按以下顺序排查:

  • 检查声明文件顶部是否保留了import 'express-serve-static-core';语句,缺少该语句时TS会将文件识别为独立全局声明,不会触发模块合并逻辑
  • 检查signedCookies字段不要加可选修饰符?,原生类型中该字段是必选属性,加可选修饰符会和原定义产生冲突导致合并失败
  • 检查本地依赖版本是否存在冲突,可删除node_modules目录和对应lock文件后重新安装依赖再验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:12:23