Я хочу расширить типичные выражения Express Session, чтобы использовать мои пользовательские данные в хранилище сеансов. У меня есть объект req.session.user
, который является экземпляром моего класса User
:
export class User {
public login: string;
public hashedPassword: string;
constructor(login?: string, password?: string) {
this.login = login || "" ;
this.hashedPassword = password ? UserHelper.hashPassword(password) : "";
}
}
Итак, я создал свой файл own.d.ts
, чтобы объединить определение с существующими типом экспресс-сессии:
import { User } from "./models/user";
declare module Express {
export interface Session {
user: User;
}
}
Но он вообще не работает - VS Code и tsc этого не видят. Поэтому я создал определение теста простым типом:
declare module Express {
export interface Session {
test: string;
}
}
И тестовое поле работает нормально, поэтому проблема с импортом.
Я также попытался добавить /// <reference path='models/user.ts'/>
вместо импорта, но tsc не видел класс User - как я могу использовать свой собственный класс в файле * d.ts?
EDIT: Я установил tsc для генерации файлов определений при компиляции, и теперь у меня есть user.d.ts:
export declare class User {
login: string;
hashedPassword: string;
constructor();
constructor(login: string, password: string);
}
И собственный файл ввода для расширения Express Sesion:
import { User } from "./models/user";
declare module Express {
export interface Session {
user: User;
uuid: string;
}
}
Но все еще не работает, когда оператор импорта сверху. Любые идеи?