【发布时间】:2019-07-01 16:55:35
【问题描述】:
我正在使用 TypeScript 和 body-parser 中间件构建一个 Web 应用程序来解析 JSON 请求正文。当我尝试访问 Request.body 对象的属性时遇到类型错误。
例如,如果我尝试req.body.username,TypeScript 会抛出错误
Property 'username' does not exist on type 'ReadableStream<Uint8Array>'.
我尝试过的事情:
- 在访问
username属性之前为ReadableStream<Uint8Array>声明一个自定义接口。
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.
看起来像这样读取请求正文内容是相当标准的用法,因此应该有一种简单的方法来解决这个问题。也许我错过了一些明显的东西。
【问题讨论】:
-
我对您在此处的设置感到有些困惑。据我了解,express typings make 的类型为
req.body,标记为any,所以应该没有类型限制。 -
@KevinRaoofi:你确定吗?我启用了严格的类型检查。尽管在
interface中明确声明body:any似乎确实有效。 -
是的,这就是我从here 得到的。我想我需要更多关于您正在做什么的背景信息,以便能够就您做错的事情向您提供反馈。