属性 'id' 在类型 'User' 上不存在,带有 Passport 和 Typescript

Property 'id' does not exist on type 'User' with Passport and Typescript

在带有 Typescript 的 Express 中使用 PassportJS,我在尝试访问 req.user.id 时遇到以下错误。

Property 'id' does not exist on type 'User'.ts(2339)

当仅 req.user 记录到控制台时,我可以清楚地看到有一个 id 属性,但是 Typescript 抛出此错误的次数较少 none。

这是我尝试 运行,

的代码片段
userRouter.post("/session", async (req: Request, res: Response) => {
  const { startTime, endTime, desc } = req.body;
  const { user } = req;

  console.log(user!.id);

  res.json({ message: "CREATE NEW SESSION" });
});

由于我是 TS 的新手,所以我不确定要采取哪些步骤来解决这个问题。我的猜测是我必须在某处更改配置中的接口或其他内容。

PassportJS 没有声明 User interface 的任何属性。您可以通过将其与代码中的以下内容合并来扩展此定义:

declare global {
  namespace Express {
    interface User {
      id: string
    }
  }
}

您的代码应该可以编译。

但是您希望 user.id 在哪里填充?您是否为此编写了自己的代码?或者 PassportJS 是否填充此 属性 尽管它没有声明它?

(我能够通过将 user!.id 替换为 user["id"] 来“欺骗”Typescript 编译器,这可能是因为我没有使用 --strict 选项。)