Decorators TypeScript expliqués : métaprogrammation

🏷️ Front-end 📅 12/04/2026 07:00:00 👤 Mezgani Said
Typescript Decorators Métaprogrammation Reflection
Decorators TypeScript expliqués : métaprogrammation

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