Przejdź do treści
webtype.orgwebtype.org#212 rebuild-pick · par 2

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 212 · 20 lipca 2026 · Łatwa

    Odtwórz Pick

    Zaimplementuj `MyPick<T, K>` tak, aby zachował tylko klucze wymienione w `K`. To wbudowany `Pick` napisany ręcznie — jeden typ mapowany, bez warunków.

    01

    Spróbuj rozwiązać samodzielnie

    Par 2

    Zagadka

    rebuild-pick.ts
    interface Todo {
      title: string
      description: string
      done: boolean
    }
    Podejście 1 z 2Jeszcze nie sprawdzone

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

    Testy

    3
    • MyPick<Todo, 'title'>
      { title: string }
    • MyPick<Todo, 'title' | 'done'>
      { title: string; done: boolean }
    • MyPick<Todo, never>
      {}

    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 21 lipca 2026

    Rozwiązanie

    type MyPick<T, K extends keyof T> = { [P in K]: T[P] }

    Najczęstsza błędna odpowiedź

    type MyPick<T, K extends keyof T> = { [P in keyof T]: T[P] }

    Mapowanie po `keyof T` kopiuje cały obiekt — `K` nigdy nie jest brane pod uwagę. Wyrażenie po `in` to zbiór kluczy, który budujesz, a nie ten, z którego czytasz.

    Linia po linii

    1. { [P in K]: ... }

      `K` to unia kluczy literalnych. Typ mapowany rozdziela się po tej unii, tworząc jedną właściwość na każdy element.

    2. T[P]

      Dostęp indeksowany. Ponieważ `K extends keyof T`, `P` jest zawsze prawdziwym kluczem `T`, więc typ nigdy nie rozszerza się do `unknown`.

    Do zapamiętania

    Typ mapowany czyta się jako `{ [Nazwa in ZbiórKluczy]: TypWartości }`. Wszystko dalej w tej ścieżce to wariacja na ten temat.

    Wykorzystuje