首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeScript + Express:类型“”IncomingMessage“”上不存在属性“”rawBody“”

TypeScript + Express:类型“”IncomingMessage“”上不存在属性“”rawBody“”
EN

Stack Overflow用户
提问于 2019-09-22 20:06:49
回答 1查看 2.7K关注 0票数 8

在我的src/app.ts中,我有:

代码语言:javascript
运行
复制
import express from 'express';
import bodyParser from 'body-parser';
const app = express()

app.use(bodyParser.json({ verify: (req, res, buf) => req.rawBody = buf }))

但是我得到了错误Property 'rawBody' does not exist on type 'IncomingMessage'

代码语言:javascript
运行
复制
app.use(bodyParser.json({ verify: (req, res, buf) => req.rawBody = buf }))

我有一个typings/express.d.ts,在其中我有:

代码语言:javascript
运行
复制
declare namespace Express {
    export interface Request {
        rawBody: any;
    }
}

我的tsconfig.json是:

代码语言:javascript
运行
复制
{
    "compilerOptions": {
        "outDir": "./built",
        "allowJs": true,
        "target": "es6",
        "esModuleInterop": true,
        "sourceMap": true,
        "moduleResolution": "node"
    },
    "include": [
        "./src/**/*"
    ],
    "files": [
        "typings/*"
    ]
}

那么我到底做错了什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-23 02:27:09

这里有两个问题:

1. tsconfig.json

tsconfig.json中的files选项不支持像typings/*这样的通配符,只支持显式的文件名。

您可以指定完整路径:

代码语言:javascript
运行
复制
"files": [
    "typings/express.d.ts"
]

或者将通配符路径添加到include

代码语言:javascript
运行
复制
"include": [
    "./src/**/*",
    "typings/*"
]

2.类型错误

错误消息提到了IncomingMessage类型,但是您却增加了Request接口。看看body-parser的类型定义(省略部分):

代码语言:javascript
运行
复制
import * as http from 'http';

// ...

interface Options {
    inflate?: boolean;
    limit?: number | string;
    type?: string | string[] | ((req: http.IncomingMessage) => any);
    verify?(req: http.IncomingMessage, res: http.ServerResponse, buf: Buffer, encoding: string): void;
}

verify的第一个参数的类型为http.IncomingMessage,该类型来自Node.js附带的'http'模块。

为了增加正确的类型,您需要将.d.ts文件更改为:

代码语言:javascript
运行
复制
declare module 'http' {
    interface IncomingMessage {
        rawBody: any;
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58049052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档