在我们的应用程序中,我们向app.locals中添加了相当多的配置对象,这些配置对象将在我们的中间件中使用。
const app = Express();
app.locals = {
someConfig: config
}
我们目前已经为Request对象提供了自定义的类型,这些类型可以正常工作
declare namespace Express {
export interface Request {
featureFlags?: FeatureFlag;
}
}
我知道locals
来自Express。应用程序,所以我尝试了这个,它不工作。
declare namespace Express {
export interface Application {
locals: {
someConfig: config;
};
}
export interface Request {
featureFlags?: FeatureFlag;
}
}
有人成功地将类型添加到app.locals中了吗?
3条答案
按热度按时间huwehgph1#
有点晚了但还是...从快递申报文件看:
只需声明全局命名空间
Express
并扩展所需的接口。toiithl62#
不能像以前那样从Application类型定义中扩展局部变量。但是,locals基于expressjs Locals类型,您可以扩展它:
提示:如果您使用的是智能IDE(如VScode或其他),则在研究此类内容时会很有帮助,您可以右键单击
this.app.locals
并选择“Go to type definition”,这就是我发现上述内容的原因。hwamh0ep3#
您可以在node_modules/@types/express-serve-static-core/index.d.ts中找到原始文件声明,而不是使用新的声明文件。然后搜索应用界面。诀窍是在该接口上定义另一个属性,所有路由都可以访问它,类似于locals属性。
现在,您可以使用
app.db ="whatever you need"
为该属性赋值,并使用所有自动完成功能。在路由处理程序或中间件中,您可以使用req.app.db
访问它。