声明与带有打字稿的自定义界面合并
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!
});
我希望将用户 属性 添加到 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!
});