CodeForge

TypeScript de Cero a Experto / Funciones e interfaces

Reto: un módulo con funciones, callbacks e interface

Reto30 min60 XP

Junta todo el módulo en una pieza: una interface para el dato, tipos-función para los callbacks, rest de funciones como criterios, y un retorno tipado con precisión. Es el esqueleto de cualquier motor de procesamiento —el tipo de código donde TypeScript brilla porque el compilador vigila cada conexión.

Reto

El procesador de gastos tipado

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

Qué debes construir

Un mini-motor que filtra gastos con criterios combinables y produce un resumen. Al ejecutarse debe imprimir EXACTAMENTE:

terminal

Comida cara: Almuerzo, Mercado

Resumen -> total: 50000, cantidad: 2, promedio: 25000

Requisitos:

  1. interface Gasto: nombre (string), valor (number), categoria (string).
  2. type Filtro: un tipo-función (g: Gasto) => boolean.
  3. type Resumen: un objeto con total, cantidad y promedio (todos number).
  4. filtrar(gastos, ...filtros): recibe los gastos y un número VARIABLE de Filtro (rest), y devuelve solo los gastos que cumplen TODOS los filtros.
  5. resumir(gastos): Resumen: calcula total, cantidad y promedio. Anota su retorno como Resumen (contrato explícito). Cuida el caso de lista vacía para no dividir entre cero (aunque aquí no ocurra).
  6. Dos filtros concretos —esComida y esCaro (valor > 10000)— y el guion que produce la salida.

Reglas

  • Anota los bordes (parámetros, y el retorno de resumir); deja inferir lo interno.
  • Al usar filter/map, NO anotes el parámetro del callback (tipado contextual).
  • Nada de any. Salida exacta.

25:00

Cuando estés listo, arranca el reloj.

Qué sigue

Módulo 3 cerrado: tipas funciones, interfaces y sabes cuándo usar cada herramienta. El módulo 4 es, para muchos, el corazón de TypeScript: el NARROWING. Aprenderás a enseñarle al compilador a razonar sobre tus datos —"si esto es verdad, entonces x es de tal tipo"— y a modelar estados con las discriminated unions, el patrón más útil de todo el lenguaje.