Comprensión de los decoradores de TypeScript
Los decoradores de TypeScript proporcionan una forma eficaz de agregar funcionalidad a clases, métodos, propiedades y parámetros en tiempo de ejecución. Suelen utilizarse en marcos como Angular para inyección de dependencias, registro, validación y más. En este artículo se explicarán los diferentes tipos de decoradores en TypeScript y cómo utilizarlos de forma eficaz.
¿Qué son los decoradores de TypeScript?
Los decoradores en TypeScript son funciones que tienen como prefijo el símbolo @
y se pueden adjuntar a varios elementos, como clases, métodos o propiedades. Permiten modificar el comportamiento del código al que están adjuntados, sin alterar el código directamente.
Tipos de decoradores
- Decoradores de clase: Se aplica a una clase entera.
- Decoradores de métodos: Se aplica a un método dentro de una clase.
- Decoradores de propiedad: Se aplica a una propiedad en una clase.
- Decoradores de parámetros: Se aplica a los parámetros de un método en una clase.
Cómo habilitar decoradores en TypeScript
Antes de poder usar decoradores, asegúrese de habilitarlos en su archivo tsconfig.json
configurando "experimentalDecorators"
en true
.
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
Decoradores de clases
Un decorador de clase se aplica a una clase entera. Resulta útil para agregar metadatos o modificar el comportamiento de una clase.
function Controller(route: string) {
return function (target: Function) {
target.prototype.route = route;
};
}
@Controller('/api/user')
class UserController {
// Class logic
}
console.log(new UserController().route); // Outputs: '/api/user'
Decoradores de métodos
Los decoradores de métodos se aplican a los métodos dentro de una clase. Estos decoradores se pueden utilizar para modificar o registrar el comportamiento de un método.
function Log(target: any, propertyName: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Calling ${propertyName} with arguments: ${args}`);
return originalMethod.apply(this, args);
};
}
class Calculator {
@Log
add(a: number, b: number) {
return a + b;
}
}
const calculator = new Calculator();
calculator.add(2, 3); // Logs: 'Calling add with arguments: 2,3'
Decoradores de propiedades
Los decoradores de propiedades se utilizan para agregar funcionalidad a las propiedades de una clase. Pueden ser útiles para la validación o para agregar metadatos a una propiedad.
function ReadOnly(target: any, key: string) {
const descriptor: PropertyDescriptor = {
writable: false
};
return descriptor;
}
class Person {
@ReadOnly
name: string = 'John Doe';
}
const person = new Person();
person.name = 'Jane Doe'; // Error: Cannot assign to read only property 'name'
Decoradores de parámetros
Los decoradores de parámetros se utilizan para modificar o registrar información sobre los parámetros del método.
function LogParameter(target: any, propertyName: string, index: number) {
const metadataKey = `log_${propertyName}_parameters`;
if (Array.isArray(target[metadataKey])) {
target[metadataKey].push(index);
} else {
target[metadataKey] = [index];
}
}
class Demo {
method(@LogParameter param1: string, @LogParameter param2: number) {
// Method logic
}
}
Conclusión
Los decoradores en TypeScript proporcionan una forma eficaz de mejorar la funcionalidad de su código sin modificar su estructura. Si comprende cómo utilizar los decoradores de clases, métodos, propiedades y parámetros, podrá implementar funciones avanzadas como registro, validación e inyección de dependencias. Los decoradores son una característica clave en TypeScript que puede mejorar enormemente su flujo de trabajo de desarrollo, especialmente en aplicaciones de gran tamaño.