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ärexpressionmå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
