Skip to content

Les décorateurs

Les décorateurs en TypeScript sont une fonctionnalité expérimentale qui permet d'annoter et de modifier des classes et des membres de classe (propriétés, méthodes). Inspirés par des langages comme Python et Java, les décorateurs offrent un moyen de faire de la métaprogrammation, c'est-à-dire de programmer qui modifie ou étend le comportement du code au moment de sa définition plutôt qu'à l'exécution.

Utilisation de Décorateurs

Pour utiliser les décorateurs en TypeScript, vous devez activer l'option experimentalDecorators dans votre fichier tsconfig.json :

json
{
  "compilerOptions": {
    "experimentalDecorators": true,
    //...
  }
}
{
  "compilerOptions": {
    "experimentalDecorators": true,
    //...
  }
}

Syntaxe des Décorateurs

Un décorateur est simplement une fonction que vous appliquez à une déclaration de classe, de méthode, d'accessoire, de propriété ou de paramètre. En TypeScript, les décorateurs utilisent le caractère @ suivi du nom de la fonction décorateur.

typescript
function decorateurClasse(constructor: Function) {
    // logique du décorateur
}

@decorateurClasse
class MaClasse {
    // ...
}
function decorateurClasse(constructor: Function) {
    // logique du décorateur
}

@decorateurClasse
class MaClasse {
    // ...
}

Types de Décorateurs

  1. Décorateurs de Classe : Appliqués à la déclaration d'une classe.

    typescript
    @decorateurClasse
    class MaClasse { }
    @decorateurClasse
    class MaClasse { }
  2. Décorateurs de Méthode : Appliqués aux méthodes d'une classe.

    typescript
    class MaClasse {
        @decorateurMethode
        maMethode() { }
    }
    class MaClasse {
        @decorateurMethode
        maMethode() { }
    }
  3. Décorateurs d'Accesseur : Appliqués aux accesseurs (getters/setters) d'une classe.

    typescript
    class MaClasse {
        private _maProp: string;
    
        @decorateurAccesseur
        get maProp() { return this._maProp; }
    }
    class MaClasse {
        private _maProp: string;
    
        @decorateurAccesseur
        get maProp() { return this._maProp; }
    }
  4. Décorateurs de Propriété : Appliqués aux propriétés d'une classe.

    typescript
    class MaClasse {
        @decorateurPropriete
        maProp: string;
    }
    class MaClasse {
        @decorateurPropriete
        maProp: string;
    }
  5. Décorateurs de Paramètre : Appliqués aux paramètres des méthodes ou des constructeurs.

    typescript
    class MaClasse {
        maMethode(@decorateurParam param: string) { }
    }
    class MaClasse {
        maMethode(@decorateurParam param: string) { }
    }

Exemple de Décorateur

Voici un exemple simple de décorateur de classe qui ajoute une propriété à la classe :

typescript
function AjouterPropriete(target: Function) {
    target.prototype.nouvellePropriete = "valeur";
}

@AjouterPropriete
class MaClasse { }

let obj = new MaClasse();
console.log(obj.nouvellePropriete); // "valeur"
function AjouterPropriete(target: Function) {
    target.prototype.nouvellePropriete = "valeur";
}

@AjouterPropriete
class MaClasse { }

let obj = new MaClasse();
console.log(obj.nouvellePropriete); // "valeur"

Avertissement

Notez que les décorateurs sont une fonctionnalité expérimentale en TypeScript et leur comportement peut changer dans les futures versions. Ils ne font pas encore partie du standard JavaScript, mais sont proposés pour une future version d'ECMAScript.

Les décorateurs offrent un moyen puissant d'ajouter des fonctionnalités et des comportements à des classes et des membres de classe en TypeScript, et ils sont largement utilisés dans des frameworks populaires comme Angular pour des fonctionnalités telles que l'injection de dépendances, la définition de métadonnées, et plus encore.