TypeScript编译Express报错:Property 'raw'不存在于typeof e类型
问题根因
express.raw() 是 Express 4.17.0 版本才正式加入的内置请求体解析中间件,你当前使用的 4.16.4 版本本身未提供该方法,你参考的开发示例均基于 4.17.0 及以上版本编写,因此会出现运行时方法不存在、TypeScript 编译报属性缺失的错误。
你遇到的编译报错:
Typescript compile error: Property 'raw' does not exist on type 'typeof e' on express
本质就是当前安装的 Express 版本、对应的 TS 类型定义包都不包含这个方法的声明和实现。
可行解决方案
根据你是否愿意升级 Express 版本,二选一即可:
方案1:升级 Express 到兼容版本
4.x 系列版本为向下兼容版本,升级到 4.17.0 以上的最新稳定版不会引入破坏性变更,执行以下命令升级核心包和类型定义:npm install express@^4.18.2 npm install -D @types/express@^4.17.21升级完成后清空 TS 编译缓存、重启 IDE 即可正常使用,你之前写的配置参数不需要修改:
// 可直接正常使用 app.use(express.raw({ type: 'application/json' }))方案2:不升级 Express,使用独立的 body-parser 包实现相同能力
Express 4.x 的内置请求体解析能力本质是对body-parser包的封装,4.17 之前的版本没有把 raw 解析器暴露到 express 顶层对象上,你可以直接安装独立的 body-parser 包实现完全一致的能力:
先安装依赖和对应类型:npm install body-parser npm install -D @types/body-parser在代码中引入后直接使用,参数、解析行为和
express.raw()完全一致:import bodyParser from 'body-parser' // 注册raw请求体解析中间件 app.use(bodyParser.raw({ type: 'application/json' }))
常见问题排查
如果升级版本后仍然报相同的 TS 错误,先执行tsc --build --clean清空项目编译缓存,再重启 TS 语言服务即可,属于类型缓存未更新的常见问题。
内容的提问来源于stack exchange,提问作者Suisse
相关产品推荐
相关产品推荐

