TypeScript:使用自己的 class 扩展 Express.Session 接口
TypeScript: Extend Express.Session interface with own class
我正在使用 npm 包开发一个 Typescript 项目。我想在Express.Session界面加一个属性
示例Class:
class User {
name: string;
email: string;
password: string;
}
export = User;
接口定义的新 d.ts 文件(不想编辑 express-session。d.ts):
declare namespace Express {
interface Session {
user: User
}
}
app.ts
import User = require('./User');
function (req: express.Request, res: express.Response) {
req.session.user //I want to use it like this.
}
问题是,d.ts 文件中的用户未知。但是既不要求也不导入用户文件修复了这个问题。
如何将自己的 class 添加到会话界面?
聚会有点晚了,但应该可以将您的界面导入定义文件
import { User } from '../models/user';
declare global {
namespace Express {
interface Session {
_user?: User
}
}
}
可能是包版本的原因,@Vitalii Zurian 提供的答案对我不起作用。如果你想在 req.session
上扩展会话数据并通过 TSC 类型检查,你应该扩展 SessionData 接口。
例如
User.ts
:
class User {
name: string = '';
email: string = '';
password: string = '';
}
export = User;
app.ts
:
import express from 'express';
import User from './User';
declare module 'express-session' {
interface SessionData {
user: User;
}
}
function controller(req: express.Request, res: express.Response) {
req.session.user;
}
包版本:
"express": "^4.17.1",
"express-session": "^1.17.1",
"@types/express-session": "^1.17.3",
"@types/express": "^4.17.11",
"typescript": "^3.9.7"
结果:
对我来说types.express-session.d.ts
:
declare namespace Express {
interface CustomSessionFields {
myCustomField: string
}
export interface Request {
session: Session & Partial<SessionData> & CustomSessionFields
}
}
这个答案与此有关
我正在使用 npm 包开发一个 Typescript 项目。我想在Express.Session界面加一个属性
示例Class:
class User {
name: string;
email: string;
password: string;
}
export = User;
接口定义的新 d.ts 文件(不想编辑 express-session。d.ts):
declare namespace Express {
interface Session {
user: User
}
}
app.ts
import User = require('./User');
function (req: express.Request, res: express.Response) {
req.session.user //I want to use it like this.
}
问题是,d.ts 文件中的用户未知。但是既不要求也不导入用户文件修复了这个问题。
如何将自己的 class 添加到会话界面?
聚会有点晚了,但应该可以将您的界面导入定义文件
import { User } from '../models/user';
declare global {
namespace Express {
interface Session {
_user?: User
}
}
}
可能是包版本的原因,@Vitalii Zurian 提供的答案对我不起作用。如果你想在 req.session
上扩展会话数据并通过 TSC 类型检查,你应该扩展 SessionData 接口。
例如
User.ts
:
class User {
name: string = '';
email: string = '';
password: string = '';
}
export = User;
app.ts
:
import express from 'express';
import User from './User';
declare module 'express-session' {
interface SessionData {
user: User;
}
}
function controller(req: express.Request, res: express.Response) {
req.session.user;
}
包版本:
"express": "^4.17.1",
"express-session": "^1.17.1",
"@types/express-session": "^1.17.3",
"@types/express": "^4.17.11",
"typescript": "^3.9.7"
结果:
对我来说types.express-session.d.ts
:
declare namespace Express {
interface CustomSessionFields {
myCustomField: string
}
export interface Request {
session: Session & Partial<SessionData> & CustomSessionFields
}
}
这个答案与此有关