声明与打印机自定义接口合并

我正在寻找添加一个用户属性的express.Requesttypes,使得req.user将是我的自定义typesIUser。 我读了声明合并是要走的路,所以我创build了一个custom.d.ts文件

declare namespace Express { export interface Request { user?: IUser; } } 

尽pipe打字稿现在允许我使用req.user,但它被定义为键入any 。 在我的types文件中导入IUser并没有帮助,因为它只是使打字机变得更糟,现在根本不能识别req.user。 我的打字怎样才能被IDE视为IUser?

首先,不要一直延伸Express Request ,因为它不是一直如此! 您只能在特定路由中更改请求接口。

其次,不要使用可选字段? 因为它一旦被批准就不是可选的(我猜)

所有您必须执行的操作都会将Express Request扩展到您的附加字段,并在您的路线上进行注释。 喜欢这个:

 interface IMyReq extends Request { user: IUser; } app.post('/api/users-list', (req: IMyReq, res) => { // Look ma a request with an authenticated user! });