属性 '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
选项。)
在带有 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
选项。)