繁体   English   中英

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

[英]How to tell typescript req.user in Passport JS never will be undefined?

使用 Passport JS 时,路由中的req.user被视为可能未定义。 但是我的路由方法之前的中间件确保不是这种情况。 如何告诉 typescript?

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM