Skip to main content

Genéricos en TypeScript: Tu arma secreta para código flexible y seguro

typescript

Autor: Reynaldo Navedo

Publicado:

¿Qué son los genéricos?

Imagina que quieres construir una caja que pueda almacenar cualquier tipo de objeto. Podrías crear una caja para manzanas, otra para herramientas, otra para libros... ¡Pero eso sería muy ineficiente! Los genéricos son como una caja mágica que se adapta al contenido que le pones. En TypeScript, te permiten crear funciones, clases e interfaces reutilizables que funcionan con diferentes tipos de datos, sin sacrificar la seguridad de tipos.


Genéricos básicos: ¡Empecemos sencillo!

El ejemplo más clásico es una función de identidad que devuelve el mismo valor que recibe:

function identidad<T>(valor: T): T {
  return valor;
}

let resultadoNumero = identidad<number>(5);   // resultadoNumero es de tipo number
let resultadoString = identidad<string>("¡Hola!"); // resultadoString es de tipo string

Aquí, <T> es un parámetro de tipo. Al llamar a la función, especificamos el tipo entre ángulos (<number> o <string>), y TypeScript se asegura de que el valor devuelto sea del mismo tipo.


Más allá de lo básico: ¡Ejemplos avanzados!


Interfaces genéricas

interface Resultado<T> {
  data: T;
  error?: string;
}

function obtenerDatos<T>(url: string): Promise<Resultado<T>> {
  // ... lógica para obtener datos de la API
}

Esta interfaz Resultado representa una respuesta de una API, que puede contener datos de cualquier tipo (T) y un mensaje de error opcional. La función obtenerDatos devuelve una promesa que se resuelve con un Resultado, donde el tipo de datos se determina al llamar a la función.


Clases genéricas

class Cola<T> {
  private elementos: T[] = [];

  encolar(elemento: T): void {
    this.elementos.push(elemento);
  }

  desencolar(): T | undefined {
    return this.elementos.shift();
  }
}

const colaNumeros = new Cola<number>();
colaNumeros.encolar(10);

Esta clase Cola representa una estructura de datos de cola, donde puedes agregar y quitar elementos. El tipo de los elementos se especifica al crear una instancia de la clase (new Cola<number>()).


¡Sácale el máximo partido a los genéricos!

  • Reutilización de código: Evita duplicar código para diferentes tipos de datos.
  • Flexibilidad: Tus componentes se adaptan a diferentes escenarios.
  • Seguridad de tipos: TypeScript te protege de errores en tiempo de compilación.


Los genéricos pueden parecer intimidantes al principio, pero una vez que los dominas, ¡se convierten en una herramienta indispensable para escribir código TypeScript más elegante, eficiente y seguro! Espero que hayas aprendido algo sobre esta publicación, no olvides compartir.

Comparte este contenido