声明与带有打字稿的自定义界面合并

Declaration merging with custom interface with typescript

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

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

虽然 typescript 现在允许我使用 req.user,但它被定义为 any 类型。在我的打字文件中导入 IUser 也无济于事,因为它只会让 typescript 现在根本无法识别 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!
});