Rozwiązanie z komentarzem
Opublikowano 19 września 2026Rozwiązanie
type ZipObject< Keys extends readonly PropertyKey[], Values extends readonly unknown[] > = Prettify< Keys extends readonly [infer K extends PropertyKey, ...infer KR extends PropertyKey[]] ? Values extends readonly [infer V, ...infer VR] ? { [P in K]: V } & ZipObject<KR, VR> : {} : {} >
Najczęstsza błędna odpowiedź
type ZipObject<Keys extends readonly PropertyKey[], Values extends readonly unknown[]> = Keys extends readonly [infer K extends PropertyKey, ...infer KR extends PropertyKey[]] ? Values extends readonly [infer V, ...infer VR] ? { [P in K]: V } & ZipObject<KR, VR> : {} : {}
Właściwości są poprawne, ale wynik pozostaje przecięciem obiektów z jedną właściwością. Przypisywalność to przyjmie; ten sprawdzacz wymaga dokładnej tożsamości, więc końcowe mapowanie jest częścią odpowiedzi.
Linia po linii
{ [P in K]: V } & ZipObject<KR, VR>Każdy przebieg zużywa jedną pozycję z obu krotek i przecina tę właściwość z resztą zbudowaną rekurencyjnie.
Prettify<Mapowanie po zgromadzonych kluczach materializuje jeden zwykły typ obiektu — dokładnie taki, jaki nazywają testy.
Do zapamiętania
Rekurencyjne konstruktory obiektów często gromadzą przecięcia. Końcowe mapowanie tożsamościowe nie jest kosmetyką, gdy liczy się dokładna równość.

