Rozwiązanie z komentarzem
Opublikowano 14 września 2026Rozwiązanie
type TitleCase<S extends string> = S extends `${infer W} ${infer Rest}` ? `${Capitalize<W>} ${TitleCase<Rest>}` : Capitalize<S>
Najczęstsza błędna odpowiedź
type TitleCase<S extends string> = Capitalize<S>Capitalize zamienia na wielką literę tekst, jeden — pierwszy znak całości i nic więcej. "hello world" staje się "Hello world". Wbudowany typ nie ma pojęcia słowa, więc wszystko, co ma kształt słowa, musisz najpierw znaleźć sam.
Linia po linii
`${infer W} ${infer Rest}`To dosłowna spacja między symbolami zastępczymi czyni z tego dzielnik słów. Wnioskowanie zatrzymuje się na pierwszej znalezionej, więc
Wto zawsze jedno słowo.: Capitalize<S>Przypadek bazowy to ostatnie słowo i jest jedynym miejscem, gdzie
Capitalizetrafia na cały pozostały tekst — bo wtedy cały pozostały tekst *jest* jednym słowem.
Do zapamiętania
Wbudowane typy tekstowe działają na całych tekstach. Słowa, segmenty i ścieżki to rzeczy, które najpierw wykrawasz wzorcami szablonowymi, a dopiero potem przekazujesz dalej.

