如何声明节点请求会话对象的打字稿接口扩展?
how to declare typescript interface extension to node request session object?
在下文中,returnTo
通过我的护照方法添加到会话对象。如何在打字稿中声明其接口?
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);
};
DefinitelyTyped 上有 express-session
的类型声明:
https://github.com/borisyankov/DefinitelyTyped/blob/master/express-session/express-session.d.ts
按照该文件中的模式,您可以创建一个新的 d.ts
(随意命名)包含:
declare module Express {
export interface Session {
returnTo: string;
}
}
TypeScript 会 "merge" 这个额外的 属性 到现有的定义中。
只需创建一个通用 T 并传递而不是请求
<T extends {session: {user: any}}, Request>(sessionRequest: T) => {}
在下文中,returnTo
通过我的护照方法添加到会话对象。如何在打字稿中声明其接口?
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);
};
DefinitelyTyped 上有 express-session
的类型声明:
https://github.com/borisyankov/DefinitelyTyped/blob/master/express-session/express-session.d.ts
按照该文件中的模式,您可以创建一个新的 d.ts
(随意命名)包含:
declare module Express {
export interface Session {
returnTo: string;
}
}
TypeScript 会 "merge" 这个额外的 属性 到现有的定义中。
只需创建一个通用 T 并传递而不是请求
<T extends {session: {user: any}}, Request>(sessionRequest: T) => {}