Rozwiązanie z komentarzem
Opublikowano 10 września 2026Rozwiązanie
type TupleToObject<T extends readonly PropertyKey[]> = { [K in T[number]]: K }Najczęstsza błędna odpowiedź
type TupleToObject<T extends readonly PropertyKey[]> = { [K in keyof T]: T[K] }Mapowanie po keyof T, gdy T jest krotką, oddaje *krotkę*, a nie obiekt — mapowanie jest homomorficzne, więc zachowuje tablicowość razem z całą resztą. ["a", "b"] mapuje się na ["a", "b"], co jest całkiem dobrą odpowiedzią na pytanie, którego nikt nie zadał.
Linia po linii
T[number]Indeksowanie krotki przez
numberpyta o „typ pod dowolnym indeksem”, czyli unię wszystkiego, co w niej jest:"a" | "b". Ta unia to zbiór kluczy, po którym naprawdę chcesz iterować.{ [K in T[number]]: K }Ponieważ zbiór kluczy jest obliczany, a nie jest
keyof T, mapowanie przestaje być homomorficzne — i właśnie dlatego wynikiem jest zwykły obiekt.
Do zapamiętania
keyof T na krotce oznacza jej indeksy; T[number] oznacza jej zawartość. Sięgnięcie po niewłaściwe zamienia obiekt w krotkę albo odwrotnie, a komunikat błędu rzadko to mówi.

