typescript / expert
Snippet
Defunktionalisierung höherer Typen mit zugeordneten Schlüssel-Lookup-Tabellen
Emuliert höhere Typen (Higher-Kinded Types) in TypeScript durch Defunktionalisierung, ohne dass native generische Typkonstruktoren höherer Ordnung benötigt werden.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
interface HKT {readonly _F: unknown;readonly _A: unknown;readonly result: unknown;}interface ArrayHKT extends HKT {readonly result: Array<this["_A"]>;}interface PromiseHKT extends HKT {readonly result: Promise<this["_A"]>;}type Apply<F extends HKT, A> = (F & { readonly _A: A })["result"];type ArrayOfNumbers = Apply<ArrayHKT, number>;type PromiseOfString = Apply<PromiseHKT, string>;
Erklärung
1
interface HKT { readonly _F: unknown; readonly _A: unknown; readonly result: unknown; }
Basis-Interface zur Definition generischer Typ-Plätze _A und Ergebnis-Slots.
2
interface ArrayHKT extends HKT { readonly result: Array<this["_A"]>; }
Konkreter HKT, der den Ergebnis-Slot an den Array-Typ mit Ziel-Typ _A bindet.
3
type Apply<F extends HKT, A> = (F & { readonly _A: A })["result"];
Wendet den Argument-Typ A auf die HKT-Definition F an und liest das Ergebnis aus.