typescript / expert
Snippet
Erzwingung von Zustandsübergängen durch Template-Literal-String-Diskriminatoren
Dieses Design nutzt Template-Literal-Typen zusammen mit generischen Constraints, um endliche Zustandsmaschinen zur Kompilierzeit zu konstruieren. Ungültige Zustandsübergänge lösen direkt an der Aufrufstelle Typprüfungsfehler aus, ohne Laufzeit-Overhead oder Framework-Code zu erfordern.
snippet.ts
typescript
1
2
3
4
5
type State = 'IDLE' | 'LOADING' | 'SUCCESS';type Command = `GO_${State}`;type Rules = { IDLE: 'GO_LOADING'; LOADING: 'GO_SUCCESS'; SUCCESS: 'GO_IDLE' };type Validate<S extends State, C extends Command> = C extends Rules[S] ? C : never;function transition<S extends State, C extends Command>(current: S, cmd: Validate<S, C>): void {}
Erklärung
1
type Command = `GO_${State}`;
Generiert dynamisch die String-Befehls-Union 'GO_IDLE' | 'GO_LOADING' | 'GO_SUCCESS'.
2
type Validate<S extends State, C extends Command> = C extends Rules[S] ? C : never;
Prüft, ob der angeforderte Befehl C ein gültiger Übergang für Zustand S ist; wird bei Ungültigkeit zu never.
3
function transition<S extends State, C extends Command>(current: S, cmd: Validate<S, C>): void {}
Erzwingt gültige Übergangsbefehle über Typ-Parameter-Validierung direkt in der Funktionssignatur.