node.js - TypeScript: Rozszerz interfejs Express.Session własną klasą
Pracuję nad projektem w TypeScript z pakietami npm. Chcę dodać właściwość do interfejsu Express.Session.
przykładowa klasa:
class User {
name: string;
email: string;
password: string;
}
export = User;
Nowy plik d.ts dla definicji interfejsu (nie chcę edytować 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.
}
Problem polega na tym, że User nie jest znany w pliku de d.ts. Ale ani require, ani import pliku User tego nie naprawia.
Jak mogę dodać własną klasę do interfejsu sesji?
Odpowiedź #1
Może to być spowodowane wersją pakietu, odpowiedź podana przez @Vitalii Zurian nie działa u mnie. Jeśli chcesz rozszerzyć dane sesji w req.session i przejść kontrole typów TSC, powinieneś rozszerzyć interfejs SessionData.
Np.
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;
}
wersje pakietów:
"express": "^4.17.1",
"express-session": "^1.17.1",
"@types/express-session": "^1.17.3",
"@types/express": "^4.17.11",
"typescript": "^3.9.7"
wynik :
Odpowiedź #2
Trochę spóźniony na imprezę, ale powinno być możliwe zaimportowanie twojego interfejsu do pliku definicji
import { User } from '../models/user';
declare global {
namespace Express {
interface Session {
_user?: User
}
}
}
