Node.js 使用typescript与自定义接口合并的声明

Node.js 使用typescript与自定义接口合并的声明,node.js,typescript,express,middleware,Node.js,Typescript,Express,Middleware,我希望将用户属性添加到express.Request类型中,以便req.user属于我的自定义类型IUser。我读到声明合并是一种方法,所以我创建了一个自定义的.d.ts文件 declare namespace Express { export interface Request { user?: IUser; } } 虽然typescript现在允许我使用req.user,但它被定义为any类型。在我的打字文件中导入IUser也没有帮助,因为它只会使ty

我希望将用户属性添加到express.Request类型中,以便req.user属于我的自定义类型IUser。我读到声明合并是一种方法,所以我创建了一个自定义的.d.ts文件

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

虽然typescript现在允许我使用req.user,但它被定义为any类型。在我的打字文件中导入IUser也没有帮助,因为它只会使typescript现在根本无法识别req.user的情况变得更糟。IDE如何将我的输入视为IUser

首先,不要一直扩展
Express
请求,因为情况并非总是如此!您必须仅在特定路由中更改请求接口

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

您所要做的就是使用附加字段扩展
Express
请求
,并在路线上对其进行注释。像这样:

interface IMyReq extends Request {
  user: IUser;
}

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

工作如预期!不知道为什么我没有想到这一点!