Genéricos en TypeScript

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

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.