1.0 1.0 - 27 days ago 15
TypeScript Question

how to declare typescript interface extension to node request session object?

In the following,

returnTo
is added to the session object by my passport methods. How do I declare its interface in typescript?

import express = require('express');
import expressSession = require('express-session');

// how to declare presence of returnTo, which is not in underlying type?

export function createSession(req: express.Request, res: express.Response, next: Function) {

passport.authenticate('local', (err: any, user: UserInstance, info: any) => {
//. . .
req.logIn(user, (err) => {
//. . .
res.redirect(req.session.returnTo || '/');
});
})(req, res, next);
};

Answer

There's a type declaration for express-session on DefinitelyTyped:

https://github.com/borisyankov/DefinitelyTyped/blob/master/express-session/express-session.d.ts

Following the pattern in that file, you can create a new d.ts (call it whatever you want) containing:

declare module Express {
  export interface Session {
    returnTo: string;
  }
}

TypeScript will "merge" this extra property into the existing definitions.