TypeScript de Cero a Experto / TS en el mundo real
Reto: una capa de datos tipada de punta a punta
El reto que junta el mundo real: una capa de datos que carga registros de un "servidor",
los VALIDA en la frontera (porque los datos externos son unknown), descarta los
inválidos y procesa solo los buenos —con seguridad de tipos de punta a punta. Es el
esqueleto de la capa de datos de cualquier app profesional, y el TypeScript que
escribirás en el trabajo.
Reto
La capa de datos tipada
Qué debes construir
Un servicio que carga gastos de un servidor simulado, valida cada uno en runtime, y reporta. Al ejecutarse debe imprimir EXACTAMENTE:
Cargados 4 registros del servidor
Válidos: 2 (descartados 2)
Total de gastos válidos: 22000
Requisitos:
type Gasto:{ nombre: string; valor: number }.esGasto(x: unknown): x is Gasto: un type guard que valide en runtime quexes un objeto connombrestring yvalornumber. (En un proyecto real usarías Zod; aquí lo haces a mano para practicar el concepto.)class RepositorioGastoscon:- un método
cargarCrudos(): Promise<unknown[]>que simule el servidor devolviendo un array MIXTO (válidos e inválidos) —tipado comounknown[], honesto. - un método
cargarValidos(): Promise<Gasto[]>que cargue los crudos, los FILTRE con el type guard, y devuelva solo los válidos ya tipados.
- un método
- El guion: carga los crudos (reporta cuántos llegaron), carga los válidos (reporta válidos y descartados), y suma el total de los válidos.
Reglas
- Los datos "del servidor" son
unknown[]hasta validarse: nada de asumir su forma. - El filtrado usa el type guard, de modo que TS trate el resultado como
Gasto[]. - Nada de
anyfuera de la comprobación interna del guard. Salida exacta.
30:00
Cuando estés listo, arranca el reloj.
Qué sigue
Módulo 8 conquistado: manejas el DOM, los datos remotos, la validación y las clases con
la soltura del mundo real. Solo quedan dos módulos. El 9 te vuelve un profesional de la
CONFIGURACIÓN —strict a fondo, paths, project references, ESLint con TS—: afinar el
entorno para que trabaje a tu favor. La recta final del supercurso.