Genéricos aplicados: reutilización con control

Construye utilidades reutilizables sin perder intención ni seguridad estática.

Los genéricos permiten reutilizar lógica sin perder relación entre entrada y salida, clave en utilidades y capas de infraestructura.

El objetivo no es hacer tipos más complejos, sino modelar invariantes que se mantienen para múltiples casos.

Un genérico bien diseñado mejora API ergonomics: menos duplicación y más garantías para consumidores.

La dificultad está en poner límites útiles (constraints) y evitar abstracciones prematuras.

  • Si una función transforma datos sin cambiar su forma esencial, un genérico captura esa relación.
  • Duplicar funciones por tipo (string[], number[], User[]) es señal de que falta abstracción genérica.
  • El beneficio real es mantener tipos concretos al consumir la función, sin perder información en unknown o any.
  • Cuando el contrato se mantiene estable, el consumidor obtiene autocomplete exacto sin anotaciones extra.
  • Restringe solo lo necesario para implementar la función de forma segura.

Preservar relación entre entrada y salida

Si una función transforma datos sin cambiar su forma esencial, un genérico captura esa relación.

Duplicar funciones por tipo (string[], number[], User[]) es señal de que falta abstracción genérica.

El beneficio real es mantener tipos concretos al consumir la función, sin perder información en unknown o any.

Cuando el contrato se mantiene estable, el consumidor obtiene autocomplete exacto sin anotaciones extra.

Constraints que reflejan necesidades reales

Restringe solo lo necesario para implementar la función de forma segura.

Si necesitas acceder a una propiedad id, exprésalo con extends { id: ... } en lugar de asumirla implícitamente.

Constraints demasiado amplios no protegen; constraints demasiado estrictos reducen reutilización sin valor.

Piensa el constraint como contrato mínimo de capacidades que la función requiere para operar.

Anti-patrones frecuentes con genéricos

No todo debe ser genérico; a veces un tipo concreto comunica mejor y complica menos.

Evita signatures crípticas con múltiples parámetros T, U, V sin semántica clara.

No uses genéricos para ocultar diseño incompleto: primero define dominio, luego abstrae repetición real.

Si una función solo se usa en un contexto concreto, un tipo explícito suele ser más mantenible.

TypeScript
08

Genéricos aplicados: reutilización con control

Construye utilidades reutilizables sin perder intención ni seguridad estática.

Código del tema: reutilización tipada

📘 Teoría

Preservar relación entre entrada y salida

Si una función transforma datos sin cambiar su forma esencial, un genérico captura esa relación.

1

Duplicar funciones por tipo (string[], number[], User[]) es señal de que falta abstracción genérica.

2

El beneficio real es mantener tipos concretos al consumir la función, sin perder información en unknown o any.

3

Cuando el contrato se mantiene estable, el consumidor obtiene autocomplete exacto sin anotaciones extra.

Constraints que reflejan necesidades reales

Restringe solo lo necesario para implementar la función de forma segura.

1

Si necesitas acceder a una propiedad id, exprésalo con extends { id: ... } en lugar de asumirla implícitamente.

2

Constraints demasiado amplios no protegen; constraints demasiado estrictos reducen reutilización sin valor.

3

Piensa el constraint como contrato mínimo de capacidades que la función requiere para operar.

Genéricos con límites de dominio
Revisar
type ContextoTypescriptgenericsavanzado = {
  foco: string;
  objetivo: string;
  riesgo: string;
};

const contexto: ContextoTypescriptgenericsavanzado = {
  foco: "reutilización tipada",
  objetivo: "escribir código predecible",
  riesgo: "abstraer sin criterio",
};

console.log("Checklist técnico:", contexto);

export {};

Anti-patrones frecuentes con genéricos

No todo debe ser genérico; a veces un tipo concreto comunica mejor y complica menos.

1

Evita signatures crípticas con múltiples parámetros T, U, V sin semántica clara.

2

No uses genéricos para ocultar diseño incompleto: primero define dominio, luego abstrae repetición real.

3

Si una función solo se usa en un contexto concreto, un tipo explícito suele ser más mantenible.

🧪 Aprende probando

Ejemplo Ejemplo guiado Lee, ejecuta y modifica para ver cómo cambia el comportamiento al ajustar tipos.
Ejemplo Demo interactiva Prueba una mini interfaz para visualizar decisiones de tipado.

🏁 Retos

Reto Reto práctico Completa el ejercicio aplicando lo visto en esta sesión.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre TypeScript.

Test de TypeScript

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .