Przejdź do treści
webtype.org#217 split-string · par 4

Nr 217 · 25 lipca 2026 · Trudna

Podziel

Zaimplementuj `Split<S, D>`, aby dzielił łańcuch `S` przy każdym wystąpieniu separatora `D`, zwracając krotkę fragmentów.

01

Spróbuj rozwiązać samodzielnie

Par 4

Zagadka

split-string.ts
Podejście 1 z 4Jeszcze nie sprawdzone

Zastąp ??? — rozwiązanie sprawdzamy przypadkami poniżej.

Testy

4
  • Split<'a,b,c', ','>
    ['a', 'b', 'c']
  • Split<'nope', ','>
    ['nope']
  • Split<'a/b', '/'>
    ['a', 'b']
  • Split<'', ','>
    ['']

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

Nobody is counting yet. Score distribution and the gra na krótkim dystansie board arrive with accounts — until then your results stay on this device.

Archiwum
02

Rozwiązanie z komentarzem

Opublikowano 26 lipca 2026

Rozwiązanie

type Split<S extends string, D extends string> =
  S extends `${infer Head}${D}${infer Tail}` ? [Head, ...Split<Tail, D>] : [S]

Najczęstsza błędna odpowiedź

type Split<S extends string, D extends string> =
  S extends `${infer Head}${D}${infer Tail}` ? [Head, Split<Tail, D>] : [S]

Bez rozwinięcia każdy wynik rekurencji zagnieżdża się o poziom głębiej: `["a", ["b", ["c"]]]`. To `...` spłaszcza rekurencję w jedną krotkę.

Linia po linii

  1. `${infer Head}${D}${infer Tail}`

    Wnioskowanie z literału szablonowego jest zachłanne od lewej, więc `Head` wiąże najkrótszy przedrostek pozwalający dopasować resztę wzorca — dając pierwsze pole, nie ostatnie.

  2. [Head, ...Split<Tail, D>]

    Rozwinięcie wstawia krotkę z rekurencji w miejscu, więc każdy poziom dokłada jeden element do płaskiego wyniku.

  3. : [S]

    Nie został już żaden separator. Cały pozostały łańcuch to ostatni fragment, opakowany w krotkę, żeby rozwinięcie powyżej miało co wstawić.

Do zapamiętania

Rekurencyjne typy łańcuchowe rozkładają się od głowy i składają z powrotem rozwinięciami. Zapomniane rozwinięcie to najczęstszy błąd przy budowaniu list na poziomie typów.