如何告诉Passport JS中的typescript req.user永远不会被定义



使用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
}

相关内容

最新更新