Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 233 · 16 sierpnia 2026 · Średnia

    ZaczynaSię

    Zaimplementuj StartsWith<S, P>, aby zgłaszał, czy łańcuch S zaczyna się przedrostkiem P. Zaczyna się — a nie tylko zawiera.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    starts-with.ts
    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

    4
    • StartsWith<'hello world', 'hello'>—
      → true
    • StartsWith<'hello world', 'world'>—
      → false
    • StartsWith<'abc', ''>—
      → true
    • StartsWith<'', 'a'>—
      → false

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

    Rozwią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

    1. `${P}${string}`

      Wzorzec literału szablonowego jest zakotwiczony po obu stronach. Umieszczenie P na początku wymaga, by pierwsze znaki S były P; końcowe ${string} przyjmuje potem dowolną resztę, także pustą.

    2. StartsWith<'abc', ''>

      Pusty przedrostek redukuje wzorzec do ${string}, który spełnia każdy łańcuch — więc odpowiedź to true, 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.

    Wykorzystuje