一尘不染

使用Typescript扩展Express Request对象

node.js

我正在尝试添加一个属性以使用Typescript从中间件表达请求对象。但是我不知道如何向对象添加额外的属性。如果可能的话,我宁愿不使用括号符号。

我正在寻找一种解决方案,允许我编写与此类似的内容(如果可能):

app.use((req, res, next) => {
    req.property = setProperty(); 
    next();
});

阅读 572

收藏
2020-07-07

共1个答案

一尘不染

您想要创建一个自定义定义,并在Typescript中使用一个称为声明合并的功能。这是常用的,例如在中method- override

创建一个文件custom.d.ts,并确保将其包含在您tsconfig.json的-部分中(files如果有)。内容如下所示:

declare namespace Express {
   export interface Request {
      tenant?: string
   }
}

这将允许您在代码中的任何时候使用如下代码:

router.use((req, res, next) => {
    req.tenant = 'tenant-X'
    next()
})

router.get('/whichTenant', (req, res) => {
    res.status(200).send('This is your tenant: '+req.tenant)
})
2020-07-07