typescript / expert
Snippet
Rekursive Tupel-Umkehrung auf Typ-Ebene
Rekursive Conditional Types in Kombination mit variadischen Tupel-Spreads erlauben Berechnungen auf Arrays auf Typ-Ebene — nicht nur zur Laufzeit. `Reverse` trennt den Kopf ab, rekursiert über den Rest und hängt den Kopf hinten an die umgekehrte Restliste an. Zusammen mit einem `const`-Typparameter auf der Runtime-Funktion bleibt das inferierte Tupel literal (`[true, "a", 1]`), statt zu einem Union-Array zu weiten — Aufrufer sehen präzise Positionstypen.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
type Reverse<T extends readonly unknown[]> =T extends readonly [infer H, ...infer R]? [...Reverse<R>, H]: [];type R1 = Reverse<[1, 2, 3]>;function reverseTuple<const T extends readonly unknown[]>(t: T): Reverse<T> {return [...t].reverse() as Reverse<T>;}const r = reverseTuple([1, "a", true] as const);
Erklärung
1
type Reverse<T extends readonly unknown[]> =
Generischer Typ, der ein Tupel auf seine Umkehrung abbildet.
2
T extends readonly [infer H, ...infer R]
Extrahiert Kopf H und Rest R über variadische Tupel-Inferenz.
3
? [...Reverse<R>, H]
Rekursionsfall: Rest umkehren, danach den Kopf anhängen.
4
function reverseTuple<const T extends readonly unknown[]>(t: T): Reverse<T> {
`const`-Parameter erhält literale Positionen; Rückgabetyp nutzt Reverse.