Quiero extender la tipificación de Express Session para permitir el uso de mis datos personalizados en el almacenamiento de sesiones. Tengo un objeto req.session.user
que es una instancia de mi clase User
:
export class User {
public login: string;
public hashedPassword: string;
constructor(login?: string, password?: string) {
this.login = login || "" ;
this.hashedPassword = password ? UserHelper.hashPassword(password) : "";
}
}
Así que creé mi own.d.ts
archivo para fusionar la definición con las tipificaciones de sesión exprés existentes:
import { User } from "./models/user";
declare module Express {
export interface Session {
user: User;
}
}
Pero no funciona en absoluto: VS Code y tsc no lo ven. Así que creé una definición de prueba con un tipo simple:
declare module Express {
export interface Session {
test: string;
}
}
Y el campo de prueba funciona bien, por lo que la importación causa el problema.
También intenté agregar en su /// <reference path='models/user.ts'/>
lugar la importación, pero el tsc no vio la clase de usuario: ¿cómo puedo usar mi propia clase en el archivo * d.ts?
EDITAR: configuré tsc para generar archivos de definición en la compilación y ahora tengo mi user.d.ts:
export declare class User {
login: string;
hashedPassword: string;
constructor();
constructor(login: string, password: string);
}
Y el propio archivo de mecanografía para ampliar Express Sesion:
import { User } from "./models/user";
declare module Express {
export interface Session {
user: User;
uuid: string;
}
}
Pero aún no funciona cuando se importa la declaración en la parte superior. ¿Algunas ideas?