I’m trying to add a property to express request object from a middleware using typescript. However I can’t figure out how to add extra properties to the object. I’d prefer to not use bracket notation if possible.
I’m looking for a solution that would allow me to write something similar to this (if possible):
app.use((req, res, next) => {
req.property = setProperty();
next();
});
You want to create a custom definition, and use a feature in Typescript called Declaration Merging. This is commonly used, e.g. in method-override
.
Create a file custom.d.ts
and make sure to include it in your tsconfig.json
's files
-section if any. The contents can look as follows:
declare namespace Express {
export interface Request {
tenant?: string
}
}
This will allow you to, at any point in your code, use something like this:
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)
})