typescript / expert
Snippet
Typsichere variadische Tupel-Komposition für generische Pipeline-Inferenz
Dosses Snippet nutzt rekursive Entpackung variadischer Tupeltypen, um End-to-End-Typsicherheit in Funktions-Pipelines zur Kompilierzeit zu überprüfen. Es stellt sicher, dass der Rückgabetyp eines Schritts als Eingabetyp des nächsten passt.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type FlowChain<Fns extends any[]> = Fns extends [infer F1, infer F2, ...infer Rest]? F1 extends (arg: infer A) => infer B? F2 extends (arg: B) => any? FlowChain<[(arg: A) => F2 extends (arg: any) => infer C ? C : never, ...Rest]>: never: never: Fns extends [(arg: infer A) => infer B]? (arg: A) => B: never;type Pipeline = FlowChain<[(x: number) => string,(s: string) => string[],(arr: string[]) => number]>;
Erklärung
1
type FlowChain<Fns extends any[]> = Fns extends [infer F1, infer F2, ...infer Rest]
Destrukturieren des Funktions-Arrays in den ersten Schritt (F1), zweiten Schritt (F2) und verbleibende Funktionen (Rest).
2
? F1 extends (arg: infer A) => infer B
Extrahiert Argumenttyp A und Rückgabetyp B der ersten Funktion mittels konditioneller Typinferenz.
3
? F2 extends (arg: B) => any
Überprüft, ob die zweite Funktion den Typ B als Eingabe akzeptiert; andernfalls wird never zurückgegeben.