Los decoradores en TypeScript son una característica avanzada que permite modificar el comportamiento de clases, métodos, propiedades y parámetros. Son una forma poderosa de añadir metadatos y lógica adicional a tu código de manera declarativa. En este tema, exploraremos qué son los decoradores, cómo se utilizan y proporcionaremos ejemplos prácticos para ilustrar su uso.
¿Qué son los Decoradores?
- Definición: Los decoradores son funciones que se aplican a declaraciones de clases, métodos, propiedades o parámetros. Se utilizan para modificar o extender su comportamiento.
- Sintaxis: Se representan con el símbolo
@seguido del nombre del decorador. Por ejemplo,@decorador.
Tipos de Decoradores
- Decoradores de Clase: Se aplican a la definición de una clase.
- Decoradores de Método: Se aplican a métodos dentro de una clase.
- Decoradores de Propiedad: Se aplican a propiedades dentro de una clase.
- Decoradores de Parámetro: Se aplican a parámetros de métodos dentro de una clase.
Ejemplo Práctico: Decorador de Clase
Vamos a crear un decorador de clase que registre la creación de instancias de una clase.
function logClass(target: Function) {
console.log(`Clase creada: ${target.name}`);
}
@logClass
class MiClase {
constructor() {
console.log('Instancia de MiClase creada');
}
}
const instancia = new MiClase();Explicación del Código
logClass: Es un decorador de clase que toma como argumento la función constructora de la clase.@logClass: Aplica el decorador aMiClase, registrando un mensaje en la consola cada vez que se crea una instancia de la clase.
Ejemplo Práctico: Decorador de Método
Ahora, crearemos un decorador de método que registre la ejecución de un método.
function logMethod(target: Object, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Método ${propertyKey} ejecutado con argumentos: ${JSON.stringify(args)}`);
return originalMethod.apply(this, args);
};
}
class Calculadora {
@logMethod
sumar(a: number, b: number): number {
return a + b;
}
}
const calc = new Calculadora();
calc.sumar(2, 3);Explicación del Código
logMethod: Es un decorador de método que intercepta la ejecución del método original.descriptor.value: Se modifica para envolver el método original, añadiendo un registro antes de su ejecución.
Ejercicio Práctico
Objetivo: Crear un decorador de propiedad que valide que una propiedad numérica no sea negativa.
Instrucciones
- Define un decorador de propiedad llamado
nonNegative. - Aplica el decorador a una propiedad de una clase.
- Implementa la lógica para lanzar un error si se intenta asignar un valor negativo.
Solución
function nonNegative(target: Object, propertyKey: string) {
let value: number;
const getter = function () {
return value;
};
const setter = function (newVal: number) {
if (newVal < 0) {
throw new Error('El valor no puede ser negativo');
}
value = newVal;
};
Object.defineProperty(target, propertyKey, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
}
class Cuenta {
@nonNegative
saldo: number = 0;
}
const cuenta = new Cuenta();
cuenta.saldo = 100; // Correcto
// cuenta.saldo = -50; // Lanza un errorExplicación del Código
nonNegative: Define un decorador de propiedad que utilizaObject.definePropertypara interceptar el acceso a la propiedad.setter: Lanza un error si el valor asignado es negativo.
Conclusión
Los decoradores en TypeScript son una herramienta poderosa para añadir metadatos y lógica adicional a tu código de manera declarativa. En este tema, hemos explorado cómo crear y utilizar decoradores de clase, método y propiedad. Practicar con decoradores te ayudará a comprender mejor su potencial y cómo pueden mejorar la estructura y funcionalidad de tu código.
En el siguiente tema, exploraremos las mejores prácticas para utilizar TypeScript y Playwright de manera efectiva.
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
