使用Passport JS时,路由内的req.user
被视为可能未定义。但是在我的路由方法之前的中间件确保了情况并非如此。如何告诉打字?
Object is possibly 'undefined'.
示例:
someMethod = async (req: Request, res: Response) => {
const { user } = req
const userId: number = user.id
}
在上面的typescript中抛出一个错误,因为user.id可能未定义。
我当然可以这样做:
if (!user) return
const userId: number = user.id
但我相信,通过我的方法一遍又一遍地重复这段代码并不是最好的方法,因为中间件甚至在到达路由方法之前就已经在这样做了。
我建议您使用所需的参数简单地声明全局Express命名空间:
declare global {
namespace Express {
interface Request {
user: User //or other type you would like to use
}
}
}
之后,您将能够在不使用//@ts-ignore
或可选链接的情况下使用req.user
。
someMethod = async (req: Request, res: Response) => {
const { user } = req
const userId: number = user.id //user will be defined
}