Typescript
Decorators
Métaprogrammation
Reflection
Comprendre et implémenter les Decorators TypeScript pour la métaprogrammation, validation et patterns avancés.
Introduction aux Decorators
Les Decorators sont des fonctions spéciales qui modifient le comportement de classes, méthodes ou propriétés. C'est une forme de métaprogrammation.
À retenir : Les Decorators permettent de modifier les définitions de code au moment de la déclaration avec une syntaxe @decorator.
Pour utiliser les Decorators, activez-les dans tsconfig.json :
{ "compilerOptions": { "experimentalDecorators": true } }
Class Decorators
function sealed(target: Function) { Object.seal(target); Object.seal(target.prototype); } @sealed class User { constructor(public name: string) {} } // Impossible d'ajouter de propriétés dynamiques
Property Decorators
function readonly(target: any, key: string) { Object.defineProperty(target, key, { writable: false }); } class User { @readonly id = 1; name = 'Alice'; } const u = new User(); u.id = 2; // Error ❌
Method Decorators
function log(target: any, key: string, descriptor: PropertyDescriptor) { const original = descriptor.value; descriptor.value = function(...args: any[]) { console.info(`Calling ${key}`, args); return original.apply(this, args); }; } class User { @log getName() { return 'Alice'; } } new User().getName(); // Logs: Calling getName []
Cas d'usage pratiques
- Validation de données
- Caching
- Logging et monitoring
- Dépendency injection
Decorators dans Angular
@Component({ selector: 'app-user', template: `<p>{{name}}</p>` }) class UserComponent { @Input() name: string; @Output() nameChanged = new EventEmitter(); }
Bonnes pratiques
- Utilisez les Decorators pour la métaprogrammation avancée
- Préférez les simples transformations
- Documentez leur comportement