我正在使用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.
似乎像这样读取请求正文内容是相当标准的用法,因此应该有一种简单的方法来解决此问题。也许我缺少明显的东西。
答案 0 :(得分:0)
我在响应主体和投射到对象上也遇到了类似的问题 产生错误:
<SampleType>res.body
并由此解决:
<SampleType>(<unknown>res.body)
我一直在寻找解决方案,但最终查看了VSCode提供的快速修复方法,该方法先转换为未知,然后转换为所需的类型。
答案 1 :(得分:-1)
您必须从快递库中导入请求和响应的定义。
在文件顶部:
import { Request, Response } from 'express';