CodeForge

TypeScript de Cero a Experto / Proyectos + retos

Proyecto: Mi Bolsillo en TypeScript estricto

Proyecto150 min150 XP

La app que construiste en JavaScript, ahora blindada con tipos. "Mi Bolsillo" migra a TypeScript estricto y, en el camino, junta casi todo el supercurso: uniones de literales, Resultado<T>, utility types, una clase con estado privado, y Record para los totales. El resultado es el mismo comportamiento de siempre —con una capa de tipos que hace imposibles clases enteras de bugs.

Reto

Mi Bolsillo tipado de punta a punta

Difícil150 min150 XP(×2 sin mirar la solución)

Qué debes construir

El motor de "Mi Bolsillo" completamente tipado. Al ejecutarse debe imprimir EXACTAMENTE:

terminal

➕ Café registrado (id 1)

➕ Bus registrado (id 2)

✗ Rechazado: el valor debe ser positivo

Total: 6800

Por categoría -> comida: 4000, transporte: 2800, ocio: 0

Buscar id 2: Bus

Buscar id 99: no existe

Requisitos (usa lo que aprendiste en TODO el curso):

  1. Categoria: unión de literales derivada de un array as const (módulo 2).
  2. Gasto: { id; nombre; valor; categoria }; y GastoNuevo = Omit<Gasto, "id"> (módulo 6) para crear.
  3. Resultado<T>: la discriminated union genérica { ok: true; datos: T } | { ok: false; error: string } (módulos 4 y 5).
  4. class Bolsillo con movimientos PRIVADOS y:
    • agregar(datos: GastoNuevo): Resultado<Gasto> — valida (valor > 0 o error), asigna un id incremental, guarda, y devuelve Resultado.
    • getter total: number.
    • porCategoria(): Record<Categoria, number> — mapa exhaustivo (módulo 6).
    • buscar(id: number): Resultado<Gasto>.
  5. El guion que produce la salida, manejando cada Resultado con narrowing (if (r.ok)).

Reglas

  • Configúralo como estricto mentalmente: nada de any, maneja cada undefined, usa los tipos derivados en vez de reescribir formas.
  • Cada método que puede fallar devuelve Resultado<T>, no lanza.
  • Los movimientos son privados de verdad. Salida exacta.

150:00

Cuando estés listo, arranca el reloj.

Qué sigue

Un proyecto completo, tipado de punta a punta. Ahora, el otro músculo de una entrevista de TypeScript: los type-challenges. La próxima lección abre los diez katas de tipos —puzzles que se resuelven SOLO con el sistema de tipos, sin runtime—, empezando por los fundamentales. La gimnasia mental que te vuelve fluido en tipos.