Generics
Una función genérica trabaja con un tipo que se decide cuando se llama a la función, no cuando se define. Es la forma en que TypeScript expresa "esto funciona igual sin importar el tipo" — una función que invierte un array no debería necesitar una versión separada para strings y numbers.
function firstElement<T>(items: T[]): T {
return items[0];
}
console.log(firstElement([1, 2, 3]));
console.log(firstElement(["a", "b", "c"]));1 a
T es un marcador de posición — TypeScript lo rellena con el tipo que realmente pases, y el tipo de retorno queda fijado para coincidir. Se sabe que firstElement([1, 2, 3]) devuelve un number; se sabe que firstElement(["a", "b"]) devuelve un string.
Interfaces genéricas
Las interfaces también pueden ser genéricas — útil para una forma como "una caja que contiene algún valor", donde el tipo del valor varía.
interface Box<T> {
value: T;
}
let numberBox: Box<number> = { value: 42 };
let stringBox: Box<string> = { value: "hello" };
console.log(numberBox.value, stringBox.value);42 hello
Siguiente: sentencias condicionales — bifurcar según un valor, igual que en cualquier otro lenguaje.