Los genéricos en TypeScript son una poderosa característica que permite crear componentes reutilizables que funcionan con múltiples tipos de datos. Esto es especialmente útil cuando se desea escribir funciones, clases o interfaces que no están limitadas a un solo tipo de dato.
Conceptos Clave de los Genéricos
-
Definición de Genéricos: Los genéricos permiten definir funciones, clases o interfaces que no están limitadas a un tipo específico, sino que pueden trabajar con cualquier tipo de dato.
-
Sintaxis de Genéricos: Se utilizan los corchetes angulares (
< >) para definir un tipo genérico. Por convención, se usa la letraTpara representar un tipo genérico, aunque se pueden usar otras letras o nombres descriptivos. -
Ventajas de los Genéricos:
- Reutilización de Código: Permiten escribir funciones y clases que pueden trabajar con cualquier tipo de dato.
- Seguridad de Tipos: Ayudan a mantener la seguridad de tipos al tiempo que permiten flexibilidad.
- Mejor Legibilidad: Facilitan la comprensión del código al indicar claramente que una función o clase es genérica.
Ejemplos Prácticos
Funciones Genéricas
Una función genérica es una función que puede aceptar argumentos de cualquier tipo y devolver un valor del mismo tipo.
function identity<T>(arg: T): T {
return arg;
}
// Uso de la función genérica
let output1 = identity<string>("Hola Mundo");
let output2 = identity<number>(100);Explicación:
- La función
identitytoma un argumentoargde tipoTy devuelve un valor del mismo tipoT. - Al llamar a la función, se especifica el tipo concreto que se utilizará (
stringonumberen este caso).
Clases Genéricas
Las clases genéricas permiten crear estructuras de datos que pueden manejar cualquier tipo de dato.
class Box<T> {
private contents: T;
constructor(value: T) {
this.contents = value;
}
getContents(): T {
return this.contents;
}
}
// Uso de la clase genérica
let stringBox = new Box<string>("Caja de Texto");
let numberBox = new Box<number>(123);Explicación:
- La clase
Boxtiene un tipo genéricoTque se utiliza para definir el tipo decontents. - Al instanciar la clase, se especifica el tipo concreto que se almacenará en la caja.
Interfaces Genéricas
Las interfaces genéricas permiten definir contratos que pueden aplicarse a múltiples tipos de datos.
interface Pair<T, U> {
first: T;
second: U;
}
let pair: Pair<string, number> = { first: "Edad", second: 30 };Explicación:
- La interfaz
Pairtiene dos tipos genéricosTyU, que representan los tipos defirstysecond. - Al usar la interfaz, se especifican los tipos concretos que se utilizarán.
Ejercicios Prácticos
Ejercicio 1: Función Genérica de Reversión
Crea una función genérica que tome un array de cualquier tipo y devuelva un nuevo array con los elementos en orden inverso.
function reverseArray<T>(items: T[]): T[] {
return items.slice().reverse();
}
// Prueba la función
let reversedNumbers = reverseArray<number>([1, 2, 3, 4]);
let reversedStrings = reverseArray<string>(["a", "b", "c", "d"]);Ejercicio 2: Clase Genérica de Pila
Implementa una clase genérica Stack que permita apilar y desapilar elementos de cualquier tipo.
class Stack<T> {
private items: T[] = [];
push(item: T): void {
this.items.push(item);
}
pop(): T | undefined {
return this.items.pop();
}
peek(): T | undefined {
return this.items[this.items.length - 1];
}
}
// Prueba la clase
let numberStack = new Stack<number>();
numberStack.push(10);
numberStack.push(20);
console.log(numberStack.pop()); // 20Conclusión
Los genéricos en TypeScript son una herramienta esencial para crear código flexible y reutilizable. Al dominar los genéricos, puedes escribir funciones, clases e interfaces que se adaptan a múltiples tipos de datos, mejorando la eficiencia y la legibilidad de tu código. En el siguiente tema, exploraremos los tipos avanzados de TypeScript, que te permitirán llevar tus habilidades de programación al siguiente nivel.
Playwright con TypeScript: De Principiante a Avanzado
Módulo 1: Introducción a Playwright y TypeScript
- ¿Qué es Playwright?
- Configuración de tu Entorno de Desarrollo
- Introducción a TypeScript
- Sintaxis Básica de TypeScript
Módulo 2: Comenzando con Playwright
- Instalando Playwright
- Creando tu Primer Script de Playwright
- Entendiendo los Conceptos Básicos de Playwright
- Ejecutando Pruebas de Playwright
Módulo 3: Fundamentos de Playwright y TypeScript
- Escribiendo Pruebas en TypeScript
- Usando Interfaces y Tipos de TypeScript
- Depurando Pruebas de Playwright
- Manejando Código Asíncrono
Módulo 4: Funciones Avanzadas de Playwright
- Trabajando con Selectores
- Manejando Múltiples Páginas y Marcos
- Intercepción de Red y Simulación
- Emulación de Dispositivos y Geolocalización
Módulo 5: Estrategias de Automatización de Pruebas
- Organización de Pruebas y Suites de Pruebas
- Uso de Fixtures y Hooks
- Ejecución Paralela de Pruebas
- Integración Continua con Playwright
Módulo 6: Técnicas Avanzadas de TypeScript
- Genéricos en TypeScript
- Tipos Avanzados de TypeScript
- Decoradores de TypeScript
- Mejores Prácticas de TypeScript y Playwright
Módulo 7: Aplicaciones Reales de Playwright
- Pruebas de Extremo a Extremo con Playwright
- Pruebas Visuales con Playwright
- Pruebas de Rendimiento con Playwright
- Estudio de Caso: Implementación de Playwright en un Proyecto
