Genéricos de TypeScript con ejemplos
Los genéricos de TypeScript son una característica poderosa que le permite crear componentes reutilizables y con seguridad de tipos. Los genéricos brindan una manera de crear clases, funciones e interfaces que funcionan con una variedad de tipos y al mismo tiempo mantienen una sólida seguridad de tipos. Este artículo le presentará los genéricos y le demostrará cómo usarlos con ejemplos prácticos.
Entendiendo los genéricos
Los genéricos le permiten definir un componente con un marcador de posición para el tipo en el que opera. En lugar de especificar un tipo concreto, se utiliza un parámetro de tipo genérico que se puede reemplazar por cualquier tipo cuando se utiliza el componente.
Sintaxis básica
La sintaxis básica para definir un tipo genérico es utilizar corchetes angulares <> con el nombre de un parámetro de tipo. A continuación, se muestra un ejemplo sencillo:
function identity(value: T): T {
return value;
}
const stringIdentity = identity("Hello"); // string
const numberIdentity = identity(123); // numberEn este ejemplo, identity es una función genérica que toma un parámetro value de tipo T y devuelve un valor del mismo tipo. El parámetro de tipo T se reemplaza por el tipo real cuando se llama a la función.
Genéricos con clases
Los genéricos también se pueden utilizar con clases para crear estructuras de datos flexibles y reutilizables. A continuación, se muestra un ejemplo de una clase genérica:
class Box {
private value: T;
constructor(value: T) {
this.value = value;
}
getValue(): T {
return this.value;
}
}
const stringBox = new Box("TypeScript");
console.log(stringBox.getValue()); // Output: TypeScript
const numberBox = new Box(42);
console.log(numberBox.getValue()); // Output: 42En este ejemplo, la clase Box se define con un parámetro de tipo genérico T. La clase tiene una propiedad privada value de tipo T y un método getValue que devuelve el valor de tipo T.
Genéricos con interfaces
Los genéricos se pueden utilizar con interfaces para crear interfaces flexibles y seguras en cuanto a tipos. A continuación, se muestra un ejemplo:
interface Pair<T, U> {
first: T;
second: U;
}
const pair: Pair<string, number> = {
first: "Age",
second: 30
};
console.log(pair.first); // Output: Age
console.log(pair.second); // Output: 30En este ejemplo, la interfaz Pair se define con dos parámetros de tipo genérico T y U. La interfaz representa un par de valores con tipos T y U, respectivamente.
Genéricos en funciones
Los genéricos se pueden utilizar en funciones para manejar múltiples tipos y, al mismo tiempo, mantener la seguridad de tipos. A continuación, se muestra un ejemplo de una función genérica que funciona con matrices:
function reverseArray(items: T[]): T[] {
return items.reverse();
}
const reversedStringArray = reverseArray(["one", "two", "three"]);
console.log(reversedStringArray); // Output: ["three", "two", "one"]
const reversedNumberArray = reverseArray([1, 2, 3]);
console.log(reversedNumberArray); // Output: [3, 2, 1]En este ejemplo, la función reverseArray toma una matriz de tipo T y devuelve una matriz invertida del mismo tipo. El parámetro de tipo T garantiza que la función funcione con matrices de cualquier tipo manteniendo la seguridad de tipos.
Restricciones a los medicamentos genéricos
A veces, puede ser necesario imponer restricciones al parámetro de tipo genérico para garantizar que tenga determinadas propiedades. Esto se hace mediante restricciones:
function logLength(item: T): void {
console.log(item.length);
}
logLength("Hello, TypeScript"); // Output: 16
logLength([1, 2, 3]); // Output: 3
// logLength(123); // Error: number does not have a length propertyEn este ejemplo, la función logLength está restringida a tipos que tienen una propiedad length. Esto permite que la función acepte cadenas y matrices, pero no números u otros tipos sin una propiedad length.
Conclusión
Los genéricos en TypeScript proporcionan una forma eficaz de crear componentes flexibles y reutilizables manteniendo al mismo tiempo una sólida seguridad de tipos. Al comprender y utilizar los genéricos, puede escribir código más genérico y adaptable, lo que mejora la calidad general y la facilidad de mantenimiento de sus aplicaciones TypeScript.
Experimente con genéricos en sus proyectos para ver sus beneficios en acción y mejorar sus habilidades de programación en TypeScript.