DEV Community

George C. Norris
George C. Norris

Posted on

1

How to extend and use an extended Request type in Typescript / Express?

How to extend and use an extended Request type in Typescript / Express?

I'm adding a BUNCH of middleware libraries that extend the Request Object. I.E. One added user to req. Another add cookie() to req. Another add csrfToken() to req. etc..

When I add a request handler function, how do I tell that function to use the req with all the bells and whistles added by middleware?

Do I hunt down every DefinitelyTyped package corresponding to the middleware? If so, then will the Request type be magically 'decorated` with these properties?

To make it even harder, I've written my own middleware that adds properties to Request

req.myCustomFunction()

In this case, will I need to declare, and extend the Request myself with myCustomFunction?

In addition, will that Request which I am extending 'include' the types given by DefinitelyTyped?


declare namespace Express {
export interface Request {
myCustomFunction: () => void
}
}

Will this now include ALL the properties included via DefinitelyTyped AND my myCustomFunction?

How do I reference this interface when using?

Will it be Express.Request? Or just Request?

If I reference it as Request, how does Typescript know to use "my" Request and not the one exported by Express's DefinitelyTyped library?

`
declare namespace Express {
export interface Request {
import_destination?: string;
isZipImport?: boolean;
method: string;
originalname: string;
unzippedPath?: string;
url: string;
user?: TUser;
}

`

DOES NOT WORK


declare module global {
interface Request {
file?: FileObj;
files?: FileObj[];
user?: TUser;
isZipImport?: boolean;
unzippedPath?: string;
}
}
`
DOES NOT WORK

`
declare global {
declare module 'express' {
export interface Request {
file?: FileObj;
files?: FileObj[];
user?: TUser;
isZipImport?: boolean;
unzippedPath?: string;
}
}
}
`

DOES NOT WORK

`
declare namespace Express {
export interface Request {
user?: TUser;
isZipImport?: boolean;
unzippedPath?: string;
}
}

`




DOES NOT WORK


I'm seriously pulling my hair out trying to get this work. 
WHY WHY WHY.. is this so complicated to make work????

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay