【发布时间】:2020-10-28 09:49:27
【问题描述】:
使用 Passport JS 时,路由中的 req.user 被视为可能未定义。但是我的路由方法之前的中间件确保不是这种情况。如何告诉打字稿?
Object is possibly 'undefined'.
例子:
someMethod = async (req: Request, res: Response) => {
const { user } = req
const userId: number = user.id
}
在上面的打字稿中抛出一个错误,因为 user.id 可能是未定义的。
我当然可以这样做:
if (!user) return
const userId: number = user.id
但我认为通过我的方法一遍又一遍地重复这段代码并不是最好的方法,因为中间件甚至在到达路由方法之前就已经这样做了。
【问题讨论】:
-
如果您的 TS 版本支持可选链接,可以使用
user?.id。 -
实际上我不能,因为那会返回未定义。我实际上是在一个期望 user.id 是数字的函数中使用这个值。
-
TS 只是在您尝试访问
user上的id之前进行空检查,因此无论如何添加它都不会有害;因为user总是有一个值,当你尝试访问user?.id时你会得到一个值 -
如果您想要快速解决方案,请使用
//@ts-ignore。如果你想要一个比这更优雅的解决方案,你需要扩展Express.Request接口。
标签: javascript node.js typescript express passport.js