【发布时间】:2019-06-01 11:41:38
【问题描述】:
我尝试将我的快速服务器代码从 js 迁移到 typescript,并在尝试访问我在自己的中间件函数中添加到请求对象的字段时遇到了问题。
例如,我正在做这样的事情:
app.use((req, res, next) => {
let account = checkAuthentication(req);
if(account) {
req.authenticated = true;
req.account = account;
next();
}
});
现在我想稍后在我的其他中间件函数中访问这些属性,但是 @types/express 中的 .d.ts 文件当然为所有中间件函数定义了 req 对象。
现在我想出了两种方法来解决这个问题,但看起来都很糟糕:
- 在每个中间件函数中使用类型保护。但后来我在 js 输出中添加了无用的代码,因为我的路由设置方式使我在“编译”时知道我的 req 对象在每个中间件函数中的形状。
- 在每个中间件函数中使用类型断言。但是,尽管我编写了代码以便在编译时知道所有类型,但我并没有得到 typescript 的好处,因为那时我基本上禁用了 req 对象的类型检查。
所以我的问题是:如果有的话,我如何在那种情况下使用类型检查?如果我不能,这是否意味着像 express 这样的框架在静态类型语言(如 C#)中是不可能的?
【问题讨论】:
标签: node.js typescript express middleware