Decorator (legacy + stage 3)

TypeScript 🔴 Senior

Définition

Syntaxe @décorateur pour modifier ou annoter une classe et ses membres. TypeScript compile la version standard depuis la 5.0 (16 mars 2023) et les métadonnées (Symbol.metadata) depuis la 5.2, en plus des décorateurs historiques (experimentalDecorators). Côté TC39, la proposition Decorators figure au Stage 2.7 dans le tableau officiel au 27 septembre 2026 (dernière présentation : mai 2026) : elle n'est donc pas encore dans ECMAScript.

Analogie

Comme un cadre autour d'un tableau — il enveloppe l'oeuvre sans la modifier, en ajoutant du contexte.

Exemple de code

// Décorateur standard (TS 5.0+), sans experimentalDecorators
function log<T extends (...a: any[]) => any>(
  cible: T, ctx: ClassMethodDecoratorContext
) {
  return function (this: unknown, ...args: any[]) {
    console.log(`appel ${String(ctx.name)}`);
    return cible.apply(this, args);
  } as T;
}
class Api {
  @log salut() { return 'hi'; }
}

Cas d'usage

Programmation orientée aspect (journalisation, autorisations, validation) dans Angular, NestJS ou TypeORM. Le mot-clé accessor (TS 4.9) crée un champ décorable avec getter/setter.

Anti-pattern

Mélanger décorateurs historiques et standard dans un même projet. Compter sur les décorateurs avec le type stripping de Node.js : il ne les supporte pas (ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX).
#advanced#pattern#framework#ts5

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre