Înțelegerea decoratorilor TypeScript
Decoratorii TypeScript oferă o modalitate puternică de a adăuga funcționalitate la clase, metode, proprietăți și parametri în timpul execuției. Ele sunt adesea folosite în cadre precum Angular pentru injectarea de dependențe, înregistrare în jurnal, validare și multe altele. Acest articol va explica diferitele tipuri de decoratori în TypeScript și cum să le folosiți eficient.
Ce sunt decoratorii TypeScript?
Decoratorii din TypeScript sunt funcții care sunt prefixate cu un simbol @
și pot fi atașate la diferite elemente precum clase, metode sau proprietăți. Acestea vă permit să modificați comportamentul codului la care sunt atașați, fără a modifica codul direct.
Tipuri de decoratori
- Decoratori de clasă: Se aplică unei întregi clase.
- Decoratori metode: Aplicat unei metode din cadrul unei clase.
- Decoratori de proprietăți: Aplicat unei proprietăți dintr-o clasă.
- Decoratori de parametri: Aplicat parametrilor unei metode dintr-o clasă.
Cum să activați decoratorii în TypeScript
Înainte de a putea folosi decoratorii, asigurați-vă că le activați în fișierul dvs. tsconfig.json
setând "experimentalDecorators"
la true
.
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
Decoratori de clasă
Un decorator de clasă este aplicat unei clase întregi. Este util pentru adăugarea de metadate sau modificarea comportamentului unei 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'
Decoratori metoda
Decoratorii de metode sunt aplicați metodelor din cadrul unei clase. Acești decoratori pot fi utilizați pentru a modifica sau înregistra comportamentul unei metode.
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'
Decoratori imobiliari
Decoratorii de proprietăți sunt utilizați pentru a adăuga funcționalitate proprietăților dintr-o clasă. Ele pot fi utile pentru validare sau pentru a adăuga metadate la o proprietate.
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'
Parametru Decoratori
Decoratorii de parametri sunt utilizați pentru a modifica sau înregistra informații despre parametrii metodei.
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
}
}
Concluzie
Decoratorii din TypeScript oferă o modalitate puternică de a îmbunătăți funcționalitatea codului dvs. fără a modifica structura acestuia. Înțelegând cum să utilizați decoratorii de clasă, metodă, proprietate și parametri, puteți implementa funcții avansate precum înregistrarea în jurnal, validarea și injectarea dependenței. Decoratorii sunt o caracteristică cheie în TypeScript care vă poate îmbunătăți foarte mult fluxul de lucru de dezvoltare, în special în aplicațiile mari.