Rozwiązanie z komentarzem
Opublikowano 3 sierpnia 2026Rozwiązanie
type Trim<S extends string> = S extends `${Whitespace}${infer R}` ? Trim<R> : S extends `${infer R}${Whitespace}` ? Trim<R> : S
Najczęstsza błędna odpowiedź
type Trim<S extends string> = S extends `${Whitespace}${infer R}${Whitespace}` ? Trim<R> : S
Wymaganie białych znaków po obu stronach w jednym wzorcu zawodzi, gdy tylko jeden koniec je ma: `" left"` nie pasuje, więc nic nie zostaje przycięte. Oba końce trzeba obsłużyć niezależnie.
Linia po linii
`${Whitespace}${infer R}``Whitespace` to unia, więc ten wzorzec jest w istocie trzema wzorcami naraz — literał szablonowy pasuje, jeśli którykolwiek element unii mieści się w miejscu.
Trim<R>Na jedno przejście odpada jeden znak, a wynik wraca na wejście. Obie gałęzie wywołują ten sam typ, więc białe znaki z przodu i z tyłu zjada ta sama pętla.
Do zapamiętania
Unia wewnątrz wzorca literału szablonowego zwielokrotnia sprawdzane wzorce. Uporządkowane gałęzie warunku pozwalają potem zdejmować po jednym końcu bez pisania dwóch osobnych typów.