Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 236 · 19 sierpnia 2026 · Średnia

    Gettery

    Zaimplementuj Getters<T>, aby każda właściwość stała się bezargumentową metodą o nazwie get plus klucz z wielkiej litery, zwracającą oryginalny typ wartości.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    getters.ts
    interface Person {
      name: string
      age: number
    }
    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
    • Getters<Person>—
      → { getName: () => string; getAge: () => number }
    • Getters<{ id: number }>—
      → { getId: () => number }
    • Getters<{}>—
      → {}

    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 20 sierpnia 2026

    Rozwiązanie

    type Getters<T> = {
      [K in keyof T as `get${Capitalize<K & string>}`]: () => T[K]
    }

    Najczęstsza błędna odpowiedź

    type Getters<T> = {
      [K in keyof T as `get${K & string}`]: () => T[K]
    }

    Wszystko jest poprawne poza wielkością liter: powstaje getname i getage. Sama konkatenacja nie zmienia wielkości liter, a w nazwach metod w camelCase ten jeden znak stanowi całą konwencję.

    Linia po linii

    1. K & string

      keyof T może zawierać symbol i number, których Capitalize nie przyjmuje. Przecięcie ze string zawęża klucz do części, którą da się wstawić, i po cichu odrzuca resztę.

    2. () => T[K]

      Wartość staje się typem funkcyjnym w trakcie przepisywania klucza. Obie połowy właściwości zmieniają się w tym samym mapowaniu, dlatego drugi przebieg nie jest potrzebny.

    Do zapamiętania

    Przemianowanie kluczy komponuje się z resztą systemu typów: literały szablonowe, wbudowane typy wielkości liter i warunki działają wewnątrz klauzuli as. Tak właśnie ORM-y i typy emiterów zdarzeń generują swoje API.

    Wykorzystuje