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????
    
Top comments (0)