From b9c60cc42b2732611636ec25ad973fcc171420f5 Mon Sep 17 00:00:00 2001 From: Troy Gerwien Date: Sun, 6 Apr 2014 11:51:38 +0800 Subject: [PATCH 1/2] open express.d.ts interfaces - provides open interfaces for Request, Response, Application - express's interfaces remain the same, but extend the open ones --- express/express.d.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/express/express.d.ts b/express/express.d.ts index 7dd170629..0b6323c4e 100644 --- a/express/express.d.ts +++ b/express/express.d.ts @@ -12,6 +12,17 @@ /// + +declare module Express { + + // These open interfaces may be extended in an application-specific manner via declaration merging. + // See for example passport.d.ts (https://github.com/borisyankov/DefinitelyTyped/blob/master/passport/passport.d.ts) + export interface Request { } + export interface Response { } + export interface Application { } +} + + declare module "express" { import http = require('http'); @@ -229,7 +240,7 @@ declare module "express" { count: number; } - interface Request { + interface Request extends Express.Request { session: Session; @@ -545,7 +556,7 @@ declare module "express" { (body: any): Response; } - interface Response extends http.ServerResponse { + interface Response extends http.ServerResponse, Express.Response { /** * Set status `code`. * @@ -893,7 +904,7 @@ declare module "express" { (req: Request, res: Response, next: Function): any; } - interface Application extends IRouter { + interface Application extends IRouter, Express.Application { /** * Initialize the server. * From ce0be7b9f5a79ae99e61f99ca844ee75ac58854e Mon Sep 17 00:00:00 2001 From: Troy Gerwien Date: Sun, 6 Apr 2014 11:59:54 +0800 Subject: [PATCH 2/2] amend passport.d.ts - passport.d.ts has been amended to merge its Request extensions into express's Request interface. - removed now-unnecessary type coercions from passport-test.ts --- passport/passport-test.ts | 8 ++++---- passport/passport.d.ts | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/passport/passport-test.ts b/passport/passport-test.ts index f102b306e..e3ee9d4f2 100644 --- a/passport/passport-test.ts +++ b/passport/passport-test.ts @@ -7,7 +7,7 @@ import passport = require('passport'); class TestStrategy implements passport.Strategy { public name: string = 'test'; constructor() {} - authenticate(req: passport.Request) {} + authenticate(req: express.Request) {} } passport.use(new TestStrategy()); @@ -33,7 +33,7 @@ app.post('/login', res.redirect('/'); }); -app.post('/login', function(req: passport.Request, res: passport.Response, next: (err?: any) => void) { +app.post('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err) } if (!user) { @@ -47,12 +47,12 @@ app.post('/login', function(req: passport.Request, res: passport.Response, next: })(req, res, next); }); -app.get('/logout', function(req: passport.Request, res: passport.Response) { +app.get('/logout', function(req, res) { req.logout(); res.redirect('/'); }); -function ensureAuthenticated(req: passport.Request, res: passport.Response, next: (err?: any) => void) { +function ensureAuthenticated(req: express.Request, res: express.Response, next: (err?: any) => void) { if (req.isAuthenticated()) { return next(); } if (req.isUnauthenticated()) { res.redirect('/login'); diff --git a/passport/passport.d.ts b/passport/passport.d.ts index ae401b252..cd86228f6 100644 --- a/passport/passport.d.ts +++ b/passport/passport.d.ts @@ -38,7 +38,16 @@ declare module 'passport' { transformAuthInfo(fn: (info: any, done: (err: any, info: any) => void) => void): void; } - interface Request extends express.Request { + interface Strategy { + name?: string; + authenticate(req: express.Request, options?: Object): void; + } +} + +declare module Express { + export interface Request { + + // These declarations are merged into express's Request type login(user: any, done: (err: any) => void): void; login(user: any, options: Object, done: (err: any) => void): void; logIn(user: any, done: (err: any) => void): void; @@ -50,11 +59,4 @@ declare module 'passport' { isAuthenticated(): boolean; isUnauthenticated(): boolean; } - interface Response extends express.Response {} - - interface Strategy { - name?: string; - authenticate(req: Request, options?: Object): void; - } } -