capypad
0 Tage Serie
typescript / expert
Snippet

Kontextuelle Metadaten mit Stage 3 Decorators

Stage 3 Decorators bieten eine typsichere Möglichkeit, Klassenmitglieder zu umschließen. Im Gegensatz zu alten experimentellen Decorators nutzen diese ein strukturiertes 'context'-Objekt, das Namen, Private/Static-Status und andere Metadaten enthält, ohne 'reflect-metadata' zu benötigen.

snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
function loggedMethod<This, Args extends any[], Return>(
target: (this: This, ...args: Args) => Return,
context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>
) {
const methodName = String(context.name);
return function (this: This, ...args: Args): Return {
console.log(`Calling ${methodName}`);
return target.call(this, ...args);
};
}
Erklärung
1
ClassMethodDecoratorContext<This, ...>
Das standardisierte Kontext-Objekt, das von der Runtime während der Dekoration bereitgestellt wird.
2
context.name
Greift direkt über den Kontext auf den Namen der dekorierten Methode zu.
3
return function (this: This, ...args: Args)
Gibt eine Ersatzfunktion zurück, die den ursprünglichen 'this'-Kontext und die Argumente beibehält.