Compreendendo decoradores TypeScript
Decoradores TypeScript fornecem uma maneira poderosa de adicionar funcionalidade a classes, métodos, propriedades e parâmetros em tempo de execução. Eles são frequentemente usados em frameworks como Angular para injeção de dependência, registro, validação e muito mais. Este artigo explicará os diferentes tipos de decoradores em TypeScript e como usá-los efetivamente.
O que são decoradores TypeScript?
Decoradores em TypeScript são funções prefixadas com um símbolo @
e podem ser anexadas a vários elementos como classes, métodos ou propriedades. Eles permitem que você modifique o comportamento do código ao qual estão anexados, sem alterar o código diretamente.
Tipos de Decoradores
- Decoradores de classe: Aplicado a uma classe inteira.
- Decoradores de métodos: Aplicados a um método dentro de uma classe.
- Decoradores de propriedade: Aplicado a uma propriedade em uma classe.
- Decoradores de parâmetros: Aplicados aos parâmetros de um método em uma classe.
Como habilitar decoradores no TypeScript
Antes de poder usar decoradores, certifique-se de habilitá-los no seu arquivo tsconfig.json
definindo "experimentalDecorators"
como true
.
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
Decoradores de classe
Um class decorator é aplicado a uma classe inteira. Ele é útil para adicionar metadados ou modificar o comportamento de uma classe.
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étodo
Decoradores de método são aplicados a métodos dentro de uma classe. Esses decoradores podem ser usados para modificar ou registrar o comportamento de um 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 imóveis
Os decoradores de propriedade são usados para adicionar funcionalidade a propriedades em uma classe. Eles podem ser úteis para validação ou para adicionar metadados a uma propriedade.
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
Decoradores de parâmetros são usados para modificar ou registrar informações sobre parâmetros de métodos.
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
}
}
Conclusão
Decoradores no TypeScript fornecem uma maneira poderosa de aprimorar a funcionalidade do seu código sem modificar sua estrutura. Ao entender como usar decoradores de classe, método, propriedade e parâmetro, você pode implementar recursos avançados como registro, validação e injeção de dependência. Decoradores são um recurso essencial no TypeScript que pode melhorar muito seu fluxo de trabalho de desenvolvimento, especialmente em aplicativos grandes.