Rozwiązanie z komentarzem
Opublikowano 10 sierpnia 2026Rozwiązanie
type Zip<A extends readonly unknown[], B extends readonly unknown[]> = A extends readonly [infer AH, ...infer AR] ? B extends readonly [infer BH, ...infer BR] ? [[AH, BH], ...Zip<AR, BR>] : [] : []
Najczęstsza błędna odpowiedź
type Zip<A extends readonly unknown[], B extends readonly unknown[]> = A extends readonly [infer AH, ...infer AR] ? B extends readonly [infer BH, ...infer BR] ? [AH, BH, ...Zip<AR, BR>] : [] : []
Bez wewnętrznych nawiasów pary rozsypują się płasko w wyniku: `[1, "a", 2, "b"]` zamiast `[[1, "a"], [2, "b"]]`. Zipowanie polega na strukturze, a struktura mieszka w tych nawiasach.
Linia po linii
[[AH, BH], ...Zip<AR, BR>]Wewnętrzne `[AH, BH]` to jedna para; rozwinięcie dokłada pary z reszty. Zagnieżdżenie krotki w krotce utrzymuje parowanie widoczne w typie.
: []Obie gałęzie awaryjne kończą rekurencję, więc ta krotka, która wyczerpie się pierwsza, zatrzymuje zip. Daje to zachowanie „krótsza z dwóch” bez mierzenia którejkolwiek długości.
Do zapamiętania
Przechodzenie dwóch struktur naraz to po prostu dwa zagnieżdżone warunki rozkładające. Ciekawą decyzją projektową jest to, co się dzieje, gdy różnią się długością — a tutaj odpowiedzią jest nierobienie niczego szczególnego.