Un décorateur de méthode permet d'en modifier le comportement par "wrapping".
Le décorateur en exemple ci-dessous n'opère aucun changement.
constNoop=()=>(target,key:string)=>{returntarget[key];};classCalculator{@Noop()sum(a,b){console.log('computing...');return a + b;}}constcalculator=newCalculator();
Remarquez le pattern de "currying" très fréquent dans l'implémentation de décorateurs.
Les décorateurs de paramètres permettent principalement d'ajouter des metadata à la classe pour que les décorateurs de méthode puissent s'en servir.
Mémorisation des résultats
Le décorateur ci-dessous construit progressivement un objet de mémorisation permettant de "mapper" les paramètres au dernier résultat obtenu afin d'éviter de refaire le même calcul inutilement.