typescript / expert
Snippet
Rekursive Tupel-Inferenz für Automatisch Curried Funktionssignaturen
Rekursive bedingte Typzuordnung unter Verwendung von infer und variadischen Tupel-Spreads wandelt Parameterlisten von Funktionen mit mehreren Argumenten in gekurriede stellige Funktionen um, wobei die präzisen Parametertypen in jedem Schritt erhalten bleiben.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
type Curry<Args extends any[], Return> = Args extends [infer Head, ...infer Tail]? (arg: Head) => Tail extends [] ? Return : Curry<Tail, Return>: () => Return;function curryTwo<A, B, R>(fn: (a: A, b: B) => R): Curry<[A, B], R> {return (a: A) => (b: B) => fn(a, b);}const add = (x: number, y: number): number => x + y;const curriedAdd = curryTwo(add);const addFive = curriedAdd(5);const result = addFive(10);
Erklärung
1
type Curry<Args extends any[], Return> = Args extends [infer Head, ...infer Tail]
Verwendet Tupel-Musterabgleich, um den ersten Argument-Typ in Head und verbleibende in Tail zu extrahieren.
2
? (arg: Head) => Tail extends [] ? Return : Curry<Tail, Return>
Löst rekursiv Rückgabetypen von einstellig verknüpften Funktionen auf, bis Tail leer ist.
3
function curryTwo<A, B, R>(fn: (a: A, b: B) => R): Curry<[A, B], R> {
Wendet den Curry-Hilfstyp auf eine binäre Funktionssignatur an.
4
return (a: A) => (b: B) => fn(a, b);
Gibt geschachtelte einstellige Pfeilfunktionen zurück, die der getypten Curry-Struktur entsprechen.