TypeScript:使用自己的类扩展Express.Session接口

时间:2016-08-11 15:28:32

标签: node.js express typescript npm express-session

我正在使用npm包处理一个Typescript项目。我想在Express.Session界面中添加一个属性。

示例类:

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.
}

问题是,de d.ts文件中不知道用户。但既不需要也不导入用户文件修复程序。

如何将自己的类添加到会话界面?提前谢谢

2 个答案:

答案 0 :(得分:11)

可能是由于软件包版本,@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"

结果:

enter image description here

答案 1 :(得分:0)

晚了一点,但是应该可以将界面导入到定义文件中

import { User } from '../models/user';

declare global {
  namespace Express {
    interface Session {
      _user?: User
    }
  }
}