Typescript-dekoratör för funktion, inte metod. Möjligt?


Jag försöker lägga till en anpassad TypeScript-dekorator i en funktion som inte ingår i en klass och det verkar som att kompilatorn klagar oavsett vad jag gör.

Några tankar? Är det möjligt?

Svar #1

lägg till en anpassad TypeScript-dekoration i en funktion

Inte till en rå funktion. Huvudproblemet är att hantera hoisting av funktioner. Alla försök att omsluta en funktion i en annan funktion bryter hoisting.

Supportmål

En Decorator är en speciell typ av deklaration som kan fästas vid en klassdeklaration, metod, accessor, egenskap eller parameter. Decorators använder formen @expression, där expression måste utvärderas till en funktion som kommer att anropas vid körning med information om den dekorerade deklarationen.

Docs: https://www.typescriptlang.org/docs/handbook/decorators.html#decorators

Svar #2

Är inte möjligt eftersom metoddekorationen använder PropertyDescriptor och denna kan endast användas i klasser.

Men det finns ett bibliotek som du kan använda metoddekorerare i funktioner, men utan syntaxen @myDecorator. Dekoreraren har samma syntax, du kan använda befintliga metoddekorerare i funktioner

https://www.npmjs.com/package/pure-function-decorator

Men istället detta:

class Somethind {
  @log
  myMethod() { //....

Du kan använda på detta sätt

const myFunction = fnDecorator([log], () => { /*....*/});

Och har samma resultat

Relaterade artiklar