Typescript Can';t覆盖快速请求用户类型,但我可以向请求添加新属性

Typescript Can';t覆盖快速请求用户类型,但我可以向请求添加新属性,typescript,express,Typescript,Express,这是一个典型的问题,似乎是一个共同的解决方案。Express请求对象有一个名为user的属性,其类型为Express.user(空对象) 我尝试了用于重新键入的常用解决方案: //index.d.ts 从“@prisma/client”导入{User as PrismaUser,Profile}; 宣布全球{ 名称空间表达式{ 导出接口请求{ 用户:PrismaUser&{profile:profile}; } } } 该文件由我的tsconfig.json文件捕获 执行上述操作时,会出现以下

这是一个典型的问题,似乎是一个共同的解决方案。Express请求对象有一个名为user的属性,其类型为Express.user(空对象)

我尝试了用于重新键入的常用解决方案:

//index.d.ts
从“@prisma/client”导入{User as PrismaUser,Profile};
宣布全球{
名称空间表达式{
导出接口请求{
用户:PrismaUser&{profile:profile};
}
}
}
该文件由我的
tsconfig.json
文件捕获

执行上述操作时,会出现以下错误:

“user”的所有声明必须具有相同的修饰符。ts(2687)

后续属性声明必须具有相同的类型。财产 “user”的类型必须为“user”,但此处的类型为“user&{profile: Profile;}

本质上,我被告知它必须输入为Express.User

同时,还开展了以下工作:

声明全局{
名称空间表达式{
导出接口请求{
当前用户:PrismaUser&{profile:profile};
}
}
}
然后我可以在代码中使用
request.currentUser


为什么我不能像这里给出的许多其他答案一样更改用户属性的类型?我没有看到其他人碰到我的错误。也许我的tsconfig坏了?

我在这件事上做错了

@types/passport添加了一个Express.User to Express并使Express.Request.User成为Express.User类型

我必须做的是

从“@prisma/client”导入{User,Profile}”;
//这该死的破了。我是唯一有这个问题的人,耸耸肩*
键入ProductUser=User&{profile:profile};
宣布全球{
名称空间表达式{
接口用户扩展ProductUser{}
}
}

这避免了对已经合并的属性使用声明合并,这会给我带来我遇到的错误。

PrismaUser&{profile?:profile}
这对您有用吗?本质上,错误是告诉您不能将非可选属性添加到现有声明中。不幸的是,不能。这是一个非常奇怪的问题。错误基本上是说这只能是Express.User类型。。。但这不完全违背宣言吗?嗯。。。我想这个问题是有道理的。这是因为@types/passport提供了一种类型的Express.User。。。