Rozwiązanie z komentarzem
Opublikowano 20 sierpnia 2026Rozwią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
K & stringkeyof Tmoże zawieraćsymbolinumber, którychCapitalizenie przyjmuje. Przecięcie zestringzawęża klucz do części, którą da się wstawić, i po cichu odrzuca resztę.() => 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.

