typescript / expert
Snippet
ECMAScript Stage 3 Methodendekorator für Parameter-Validierung
Dieses Beispiel zeigt moderne Standard-ECMAScript-Stufe-3-Methodendekoratoren in TypeScript ohne experimentelle Flags. Es nutzt `ClassMethodDecoratorContext` mit strikt typisierten generischen Typ-Parametern für `This`, `Args` und `Return`, um Methoden zu dekorieren und Eingaben zur Laufzeit zu validieren.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function ValidateNonEmpty<This, Args extends [string, ...unknown[]], 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 {if (!args[0] || args[0].trim().length === 0) {throw new Error(`Invalid argument in ${methodName}: string must not be empty`);}return target.apply(this, args);};}class UserRegistry {@ValidateNonEmptyregisterUser(username: string, role: string): string {return `Registered ${username} as ${role}`;}}
Erklärung
1
function ValidateNonEmpty<This, Args extends [string, ...unknown[]], Return>(...
Definiert einen typsicheren Dekorator für Methoden, deren erstes Argument garantiert ein String ist.
2
context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>
Nutzt das offizielle Dekorator-Kontext-Objekt zur typsicheren Inspektion von Metadaten wie dem Methodennamen.
3
return function (this: This, ...args: Args): Return
Gibt eine Wrapper-Ersatzfunktion zurück, die den Instanzkontext und die Rückgabetypsignatur bewahrt.
4
@ValidateNonEmpty
Wendet den Dekorator mithilfe der nativen Stufe-3-Dekoratorsyntax direkt auf Klassenmethoden an.