将TypeScript与body-parser结合使用以读取req.body属性

时间:2019-07-01 16:55:35

标签: typescript body-parser

我正在使用TypeScript和body-parser中间件来构建Web应用程序,以解析JSON请求正文。尝试访问Request.body对象上的属性时,我遇到类型错误。

例如,如果我尝试req.body.username,TypeScript会引发错误

Property 'username' does not exist on type 'ReadableStream<Uint8Array>'. 

我尝试过的事情:

  • 在访问ReadableStream<Uint8Array>属性之前,为username声明自定义界面。
interface ReadableStream<Uint8Array> {
    username: string
}

TypeScript通知我ReadableStream已声明但从未使用过。无法弄清楚为什么会这样。

  • if块中包装用法
if (req.body.hasOwnProperty('username')) {
    // Use req.body.username here
}

TypeScript似乎不理解这意味着该属性用户名存在。

  • 使用索引而不是点符号
let p_username = req.body['username'];

这是我最后尝试的方法,即使它无法进行类型检查。即使这样也不起作用:

Element implicitly has an 'any' type because type 'ReadableStream<Uint8Array>' has no index signature.

似乎像这样读取请求正文内容是相当标准的用法,因此应该有一种简单的方法来解决此问题。也许我缺少明显的东西。

2 个答案:

答案 0 :(得分:0)

我在响应主体和投射到对象上也遇到了类似的问题 产生错误:

<SampleType>res.body

并由此解决:

<SampleType>(<unknown>res.body)

我一直在寻找解决方案,但最终查看了VSCode提供的快速修复方法,该方法先转换为未知,然后转换为所需的类型。

答案 1 :(得分:-1)

您必须从快递库中导入请求和响应的定义。

在文件顶部:

import { Request, Response } from 'express';