我试图将我的快速服务器代码从js迁移到打字稿,并尝试访问我在自己的中间件函数中添加到请求对象的字段时遇到问题。
例如,我正在做这样的事情:
app.use((req, res, next) => {
let account = checkAuthentication(req);
if(account) {
req.authenticated = true;
req.account = account;
next();
}
});
现在,我以后想在其他中间件函数中访问这些属性,但是@ types / express中的.d.ts文件当然以所有中间件函数相同的方式定义了req对象。
现在,我想出了两种方法来解决这个问题,但两种方法似乎都很糟糕:
所以我的问题是:在这种情况下,我如何才能利用类型检查?如果不能的话,这是否意味着在静态类型的语言(如C#)中无法实现像express这样的框架?
答案 0 :(得分:1)
您可以使用module augmentation扩展Request
模块中定义的express
类型
declare global {
namespace Express {
export interface Request {
account: Account;
authenticaticated: boolean
}
}
}