Genéricos en TypeScript: La herramienta que necesitas conocer (y usar)
any o duplicar funciones.El concepto básico
<T> que ves por ahí? Seguro lo has visto en varios lenguajes tipados.Restricciones: cuando tu genérico necesita reglas
T cumpla ciertas condiciones. Por ejemplo, si estás ordenando elementos y todos deben tener una propiedad nombre:Si alguien intenta pasar un array de números, TypeScript lo detiene en tiempo de compilación. Nada de errores en runtime a las 2 de la mañana XD
Casos más avanzados
Las desventajas
Los genéricos tienen su lado complicado. Añaden complejidad cognitiva. Para alguien que está aprendiendo, ver <T extends U where V> puede ser intimidante. Y si abusas de ellos, terminas con tipos imposibles de leer: Wrapper<Promise<Ref<T[]>>>.
Los mensajes de error también pueden ser confusos. A veces TypeScript te suelta algo como "Type 'X' is not assignable to type 'infer Y in conditional over mapped tuple'" y te quedas igual.
string directamente. No compliques las cosas sin razón.¿Cuándo usarlos?
Úsalos cuando:
- Construyas utilidades reutilizables: funciones como map, filter, cache, wrappers de resultados
- Trabajes con clientes API y quieras mantener type safety entre diferentes endpoints
- Desarrolles librerías de componentes: props de React, formularios, modales
No los uses cuando:
- El tipo es fijo y no va a cambiar
- Tu equipo está empezando con TypeScript (mejor mantenerlo simple)
- No aportan valor real (si solo lo usas con un tipo, no tiene sentido)
Conclusión
Los genéricos no son algo que debas usar en todas partes. Pero cuando necesitas consistencia entre tipos diferentes (datos de usuario, objetos de configuración, respuestas de API) sin perder seguridad de tipos, son la herramienta indicada.
Piénsalo como una llave maestra: una llave, muchas puertas. Cada cerradura es diferente, pero el mecanismo es el mismo. No reconstruyes la puerta, diseñas la llave para que se adapte.
Úsalos donde la flexibilidad y la seguridad deben coexistir. No siempre, no en todas partes. Solo cuando tiene sentido.
No hay comentarios: