Ich möchte die Express-Sitzungstypisierung erweitern, um die Verwendung meiner benutzerdefinierten Daten im Sitzungsspeicher zu ermöglichen. Ich habe ein Objekt, req.session.user
das eine Instanz meiner Klasse ist User
:
export class User {
public login: string;
public hashedPassword: string;
constructor(login?: string, password?: string) {
this.login = login || "" ;
this.hashedPassword = password ? UserHelper.hashPassword(password) : "";
}
}
Also habe ich meine own.d.ts
Datei erstellt, um die Definition mit vorhandenen Express-Sitzungstypen zusammenzuführen:
import { User } from "./models/user";
declare module Express {
export interface Session {
user: User;
}
}
Aber es funktioniert überhaupt nicht - VS Code und tsc sehen es nicht. Also habe ich eine Testdefinition mit einfachem Typ erstellt:
declare module Express {
export interface Session {
test: string;
}
}
Und das Testfeld funktioniert in Ordnung, so dass der Import ein Problem verursacht.
Ich habe auch versucht, /// <reference path='models/user.ts'/>
stattdessen Import hinzuzufügen, aber der tsc hat die Benutzerklasse nicht gesehen. Wie kann ich meine eigene Klasse in der Datei * d.ts verwenden?
BEARBEITEN : Ich habe tsc so eingestellt, dass beim Kompilieren Definitionsdateien generiert werden, und jetzt habe ich meine user.d.ts:
export declare class User {
login: string;
hashedPassword: string;
constructor();
constructor(login: string, password: string);
}
Und die eigene Typisierungsdatei zum Erweitern von Express Sesion:
import { User } from "./models/user";
declare module Express {
export interface Session {
user: User;
uuid: string;
}
}
Funktioniert aber immer noch nicht, wenn die Importanweisung oben steht. Irgendwelche Ideen?