Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 263 · 15 września 2026 · Średnia

    Z wpisów

    Zaimplementuj FromEntries<T>, aby unia par [klucz, wartość] stawała się obiektem. Każdy klucz ma dostać własną wartość, a nie wszystkie naraz.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    from-entries.ts
    Podejście 1 z 3Jeszcze nie sprawdzone

    Zastąp ??? — rozwiązanie sprawdzamy przypadkami poniżej. Tab wcina; naciśnij Escape, a potem Tab, by wyjść fokusem.

    Testy

    3
    • FromEntries<['a', 1] | ['b', 2]>—
      → { a: 1; b: 2 }
    • FromEntries<['x', string]>—
      → { x: string }
    • FromEntries<['a', 1] | ['a', 2]>—
      → { a: 1 | 2 }

    Jak oceniamy test Dokładna równość typów, nie przypisywalność — przecięcie to nie to samo co spłaszczony obiekt.

    Jak poszło innym

    Tę zagadkę rozwiązało jak dotąd mniej niż 5 osób. Rozkład pojawi się, gdy próbka będzie na tyle duża, by coś znaczyć.

    Gra na krótkim dystansie

    Najmniej znaków

    Nie ma jeszcze publicznych wyników.

    Archiwum
    02

    Rozwiązanie z komentarzem

    Opublikowano 16 września 2026

    Rozwią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

    1. Extract<T, [K, unknown]>

      To krok ponownego zawężenia. Dla każdego K wyciąga tylko te pary, których pierwszy element to ten klucz, odrzucając resztę unii.

    2. 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.

    Wykorzystuje