Rozwiązanie z komentarzem
Opublikowano 16 września 2026Rozwiązanie
type FromEntries<T extends [PropertyKey, unknown]> = { [K in T[0]]: Extract<T, [K, unknown]>[1] }Najczęstsza błędna odpowiedź
type FromEntries<T extends [PropertyKey, unknown]> = { [K in T[0]]: T[1] }Klucze są dobre, a każda wartość zła. Wewnątrz mapowania T to wciąż cała unia, więc T[1] to wszystkie wartości naraz: { a: 1 | 2; b: 1 | 2 }. Iterowanie po T[0] zawęża *klucz*, który zapisujesz, a nie T, z którego czytasz.
Linia po linii
Extract<T, [K, unknown]>To krok ponownego zawężenia. Dla każdego
Kwyciąga tylko te pary, których pierwszy element to ten klucz, odrzucając resztę unii.FromEntries<['a', 1] | ['a', 2]>Dwie pary dzielą klucz, więc wyciągnięcie zostawia obie i wartością naprawdę jest
1 | 2. Unia jest tu poprawna — tamta wcześniejsza też była poprawna, tylko doczepiona do złych kluczy.
Do zapamiętania
Iterowanie po unii nie zawęża samej unii, tylko klucz, który produkujesz. Jeśli potrzebujesz odpowiadającego składnika, poproś o niego przez Extract.

