Genéricos <T> en TypeScript
En TypeScript, <T> es una notación genérica que se utiliza para definir tipos genéricos.
Los tipos genéricos permiten que funciones, clases, interfaces o tipos trabajen con múltiples tipos sin perder el control del tipado, proporcionando flexibilidad y reutilización de código.
¿Qué significa <T>?
Tes una convención para denotar un parámetro gnérico de tipo- Es como una variable para tipos, que permite especificar el tipo que se usará en un tiempo de ejecución
Ejemplo sin genéricos:
function identidad(valor: any): any { return valor;}
const resultado = identidad(42); // Devuelve 42, pero el tipo es 'any'El problema aquí es que TypeScript no sabe qué tipo retorna la función (any no es específico), por lo que no tiene tipado fuerte.
Ejemplo con genéricos:
function identidad<T>(valor: T): T { return valor;}
const resultado = identidad<number>(42); // Específicamente un 'number'const texto = identidad<string>("Hola"); // Específicamente un 'string'<T>indica queTes un parámetro de tipovalor: Tsignifica que el parámetro tiene el mismo tipo que se especifica al usar la función- La función retorna el mismo tipo
(T)
Ventajas de los genéricos
- Reutilización de código: Puedes usar una única función o clase para trabajar con diferentes tipos.
- Tipado seguro: TypeScript infiere el tipo según el contexto, reduciendo errores.
- Flexibilidad: No necesitas definir explícitamente el tipo; se puede inferir automáticamente
Ejemplo con inferencia
TypeScript puede inferir automáticamente el tipo, sin necesidad de especificarlo explícitamente:
function identidad<T>(valor: T): T { return valor;}
const numero = identidad(42); // T se infiere como 'number'const texto = identidad("Hola"); // T se infiere como 'string'Clases genéricas
Los genéricos también son útiles para clases
class Caja<T> { contenido: T;
constructor(contenido: T) { this.contenido = contenido; }
abrir(): T { return this.contenido; }}
const cajaDeNumero = new Caja<number>(123);console.log(cajaDeNumero.abrir()); // 123
const cajaDeTexto = new Caja<string>("Hola");console.log(cajaDeTexto.abrir()); // "Hola"