gro*_*oot 2 javascript api types typescript
TS 错误“对象未定义”
尝试从我的标头访问“userid”。
它不断抛出错误“‘字符串|未定义’类型的参数不可分配给‘字符串’类型的参数。‘未定义’类型不可分配给‘字符串’类型。”
当我已经将 userid 定义为字符串或未定义时,为什么会弹出此错误?
有人有什么想法吗????
更新:
在访问 apiGateway 事件之前添加检查
if (apiGateway.event !== undefined) {
const { userid } = req.apiGateway.event.headers;
} else {
throw new badRequestException()
}
return......
Run Code Online (Sandbox Code Playgroud)
根据您的定义判断MyRequest:
apiGateway 可以是未定义的event不能是未定义的headers不能是未定义的userid 可以是未定义的因此,写入req.apiGateway.event.headers将立即失败,因为 ifapiGateway未定义,则.event对其进行访问将崩溃。所以 Typescript 不允许这样做。
有三种方法可以解决这个问题:
if (req.apiGateway === undefined) { throw new badRequestException(); }undefined,您可以强制 TypeScript 接受它。写req.apiGateway!.event。请注意,如果apiGateway确实在运行时未定义,您将收到异常。因此,仅当您绝对 100% 确定它在任何情况下都不会是未定义时才使用它。req.apiGateway?.event- 在这种情况下.event也将被视为不可定义。如果req.apiGateway在运行时恰好是未定义的,那么req.apiGateway?.event也将是未定义的。等等等等。这意味着您还必须添加?.到该行的其余部分:req.apiGateway?.event?.headers。整个表达式的结果也是不可定义的,因此稍后您可能需要使用更多未定义检查。现在,解决你的第二个问题。当前您的userid局部变量的类型为string|undefined。我们因为req.apiGateway.event.headers.userid是string|undefined。这意味着在运行时它可以是字符串,也可以是未定义的。然而该方法updateNotification()需要一个简单的string参数。它无法处理未定义的值。如果您将其传递为未定义,谁知道会发生什么(可能是例外)。因此 Typescript 不允许这样做。同样,您可以使用上述方法来处理它。
| 归档时间: |
|
| 查看次数: |
13161 次 |
| 最近记录: |