CodeForge

TypeScript de Cero a Experto / Genéricos

Reto: un repositorio genérico y tipado

Reto35 min60 XP

El reto que junta el módulo: una clase genérica con constraint que puede almacenar CUALQUIER tipo de entidad —siempre que tenga un id— y devolver resultados tipados con Resultado<T>. Es el patrón de un repositorio en memoria, el corazón de la capa de datos de miles de aplicaciones. Genéricos, constraints y discriminated unions, trabajando juntos.

Reto

El repositorio genérico

Media30 min60 XP(×2 sin mirar la solución)

Qué debes construir

Un Repositorio<T> reutilizable para cualquier entidad con id. Al ejecutarse debe imprimir EXACTAMENTE:

terminal

Guardados: 3 items

Encontrado: Bus ($ 2800)

Buscar 99: No existe el id 99

Tras borrar id 1: 2 items

Requisitos:

  1. type Resultado<T>: la discriminated union genérica { ok: true; datos: T } | { ok: false; error: string }.
  2. class Repositorio<T extends { id: number }>: la constraint garantiza que toda entida​d tenga id. Guarda los items en un array PRIVADO.
  3. Métodos:
    • agregar(item: T): void
    • buscar(id: number): Resultado<T> — devuelve { ok: true, datos } si existe, o { ok: false, error: "No existe el id X" } si no.
    • borrar(id: number): void
    • un getter cantidad: number
  4. El guion: crea un Repositorio<Gasto>, agrega tres gastos, busca uno existente (id 2) y uno inexistente (id 99) manejando el Resultado con narrowing, borra el id 1, e imprime la cantidad final.

Reglas

  • La constraint T extends { id: number } es obligatoria (es lo que permite buscar por id dentro de la clase genérica).
  • buscar devuelve Resultado<T>, y el guion lo maneja con if (r.ok).
  • El array de items es privado. Nada de any. Salida exacta.

30:00

Cuando estés listo, arranca el reloj.

Qué sigue

Módulo 5 cerrado: los genéricos ya no te intimidan —los escribes en funciones, interfaces y clases, con constraints y defaults. El módulo 6 te da un regalo que esos genéricos hicieron posible: los UTILITY TYPES. TypeScript trae docenas de transformadores de tipos ya hechos —Partial, Pick, Omit, Record— que te ahorran escribir a mano lo que ahora entiendes por dentro.