Genéricos en TypeScript
Descripción: Los genéricos en TypeScript permiten crear componentes reutilizables que pueden trabajar con diferentes tipos de datos, ofreciendo flexibilidad y manteniendo la seguridad de tipos. Son similares a los "templates" en C++ y los "generics" en Java. Usar genéricos permite definir clases, funciones y tipos que no están atados a un tipo específico, lo que permite su reutilización con diferentes tipos de datos.
Genéricos en Funciones
// Función genérica que acepta un argumento de cualquier tipo y lo devuelve
function identity(arg: T): T {
return arg;
}
// Uso de la función genérica con diferentes tipos de datos
let output1 = identity("Hola, Mundo!");
let output2 = identity(42);
console.log(output1); // Hola, Mundo!
console.log(output2); // 42
Genéricos en Clases
// Clase genérica que almacena una lista de elementos de cualquier tipo
class GenericList {
private items: T[] = [];
add(item: T): void {
this.items.push(item);
}
getAll(): T[] {
return this.items;
}
}
// Uso de la clase genérica con diferentes tipos de datos
let stringList = new GenericList();
stringList.add("Hola");
stringList.add("Mundo");
let numberList = new GenericList();
numberList.add(1);
numberList.add(2);
console.log(stringList.getAll()); // ["Hola", "Mundo"]
console.log(numberList.getAll()); // [1, 2]
Genéricos en Interfaces
// Interface genérica que define una estructura de par clave-valor
interface KeyValuePair {
key: K;
value: V;
}
// Uso de la interface genérica con diferentes tipos de datos
let pair1: KeyValuePair = { key: "edad", value: 30 };
let pair2: KeyValuePair = { key: 1, value: "uno" };
console.log(pair1); // { key: "edad", value: 30 }
console.log(pair2); // { key: 1, value: "uno" }
Explicación del Código
- Genéricos en Funciones: La función
identity
acepta un argumentoarg
de cualquier tipoT
y devuelve un valor del mismo tipoT
. El tipo genéricoT
se especifica entre los corchetes angulares<T>
. - Genéricos en Clases: La clase
GenericList
utiliza un tipo genéricoT
para definir una lista de elementos de cualquier tipo. Los métodosadd
ygetAll
operan sobre este tipoT
. - Genéricos en Interfaces: La interface
KeyValuePair
utiliza dos tipos genéricosK
yV
para definir una estructura de par clave-valor. Esto permite que la clave y el valor puedan ser de cualquier tipo.
Conclusión
Los genéricos en TypeScript son una poderosa característica que permite escribir código flexible y reutilizable. Al utilizar genéricos, puedes crear componentes que funcionen con cualquier tipo de datos, manteniendo la seguridad de tipos y mejorando la mantenibilidad del código.