Rozwiązanie z komentarzem
Opublikowano 17 sierpnia 2026Rozwiązanie
type StartsWith<S extends string, P extends string> = S extends `${P}${string}` ? true : false
Najczęstsza błędna odpowiedź
type StartsWith<S extends string, P extends string> = S extends `${string}${P}${string}` ? true : false
To pyta, czy P występuje *gdziekolwiek* — to includes, nie startsWith. Wiodące ${string} pozwala dopasowaniu przesunąć się poza początek, więc "hello world" zgłasza true dla przedrostka "world".
Linia po linii
`${P}${string}`Wzorzec literału szablonowego jest zakotwiczony po obu stronach. Umieszczenie
Pna początku wymaga, by pierwsze znakiSbyłyP; końcowe${string}przyjmuje potem dowolną resztę, także pustą.StartsWith<'abc', ''>Pusty przedrostek redukuje wzorzec do
${string}, który spełnia każdy łańcuch — więc odpowiedź totrue, zgodnie z zachowaniem"abc".startsWith("")w czasie wykonania.
Do zapamiętania
Miejsce, w którym umieścisz ${string}, jest miejscem dopuszczonego luzu. Luz z przodu oznacza „zawiera”, luz z tyłu — „zaczyna się od”, a luz po obu stronach oznacza, że przypadkiem napisałeś test podłańcucha.

