Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Solución: Extender el objeto Request de Express en TypeScript

A menudo fascinado por la creación de mis propias API's, quise esta vez crear mis propios "middleware". Después de investigar por dos días, encontré la solución para agregar propiedades personalizadas al objeto Request de Express en TypeScript. Aquí el resumen técnico:

Note

Este ejemplo es para que veas lo fácil que puede ser crear tu propio middleware en Typescript, lo que puede a veces resultar difícil configurar el tsconfig.json.


🔍 El Problema

Al intentar agregar una propiedad personalizada al objeto Request:

index.ts

app.use(userMiddleware); // ❌ Ninguna sobrecarga coincide con esta llamada.

app.get("/", (req, res) => {
  if (req.datosUsuario) {
    res.send(`ID: ${req.datosUsuario.id}, Nombre: ${req.datosUsuario.nombre}`);
    // ❌ La propiedad 'datosUsuario' no existe en el tipo 'Request...'
  } else {
    res.status(500).send("Error interno");
  }
});

middleware.ts

import { Request, Response, NextFunction } from "express";

export const userMiddleware = (
  req: Request,
  res: Response,
  next: NextFunction,
): void => {
  req.datosUsuario = {
    id: 1,
    nombre: "Juan",
  };
  next();
};

@types/express.d.ts

import "express";

declare module "express" {
  export interface Request {
    datosUsuario: {
      id: number;
      nombre: string;
    };
  }
}

Al compilar ⛔

user@hostname MINGW64 ~/MyMiddleware

$ npm run build
 > app@1.0.0 build
 > tsc --build

src/index.ts:11:11 - error TS2339: Property 'datosUsuario' does not exist on type 'Request<{}, any, any, ParsedQs, Record>.


🛠️ La Solución

@types/express.d.ts

import "express";

declare global {
  namespace Express {
    interface Request {
      datosUsuario?: {
        id: number;
        nombre: string;
      };
    }
  }
}

tsconfig.jon ✅ Se debe incluir los tipos

{
  "compilerOptions": {
    "typeRoots": [
      "./node_modules/@types",
      "./@types"
    ]
  },
  "include": [
    "src/**/*",
    "@types/**/*"
  ]
}

🛟Conclusión

Para extender Request en TypeScript:

  1. Crea declaraciones de tipos en @types/express.d.ts
  2. Configura typeRoots y include en tsconfig.json
  3. ¡Usa tus propiedades sin miedo a los tipos!

🧬 Estructura del proyecto final

graph TD
    A[📦 MyMiddleware] --> B(📂 @types/)
    B --> C(📄 express.d.ts)
    A --> D(📂 dist/)
    A --> E(📂 node_modules/)
    A --> F(📂 src/)
    F --> G(📄 index.ts)
    F --> H(📄 middleware.ts)
    A --> I(📄 tsconfig.json)
    A --> J(📄 package.json)
    A --> K(📄 package-lock.json)
Loading

Warning

Importante: Verifica que tu directorio @types esté en la raíz del proyecto.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages