Búsqueda de sitios web

javascript - La propiedad `user` no existe en el tipo `Session & Partial`


Tenía un código en JavaScript y estoy tratando de convertirlo a TypeScript

route.get('/order', async(req,res) => {  
    var sessionData = req.session;
    if(typeof sessionData.user === 'undefined')
    {        
        res.redirect('/panel/login');
    }    

este es un fragmento de mi código que solía funcionar correctamente en javascript pero ahora obtengo este error para el user:

La propiedad 'user' no existe en el tipo 'Session & Partial'

Asumo que debería agregar tipos para la variable sessionData y los parámetros (req, res), pero no sé qué tipo debería asignarse exactamente a ellos.

PD: Sé que esta pregunta parece duplicada, pero he intentado soluciones de otras preguntas similares y no funcionó

Cualquier ayuda sería apreciada.

Respuesta #1

Como se indica en el comentario de tipos de express-session, tienes que usar Declaration merging.

Aquí se muestra cómo puedes implementar fusión de declaraciones en express-session:

import session from 'express-session';

declare module 'express-session' {
  export interface SessionData {
    user: { [key: string]: any };
  }
}

Respuesta #2

Acabo de encontrarme con el mismo problema que tú. Esto parece ser un problema bastante reciente: ve la explicación aquí.

Para solucionar esto, sobrecargué el módulo como se describe en el problema de Github:

import "express-session";
declare module "express-session" {
  interface SessionData {
    user: string;
  }
}

Simplemente reemplaza string con el tipo que necesites para ese campo.

También he agregado ./typing-stubs en tsconfig.json

"typeRoots": [
      "./typing-stubs",
      "./node_modules/@types"
]

Artículos relacionados