type-challenges-solutions
type-challenges-solutions copied to clipboard
type-challenges-solutions/en/medium-trim
Trim
This project is aimed at helping you better understand how the type system works, writing your own utilities, or just having fun with the challenges.
https://ghaiklor.github.io/type-challenges-solutions/en/medium-trim.html
Left trim and right trim can combined by using union also as in below.
type Trim<S> = S extends `${infer L}${Whitespace}` | `${Whitespace}${infer R}` ? Trim<T> :S;
@gauravpan interesting, can you explain step by step why it works?
As suggested by @gauravpan, we could tell TS to check if there is a white space to either left or right of the string, and let it infer the correct Rest for us.
type Whitespace = " " | "\n" | "\t";
type Trim<S> = S extends
| `${infer Rest}${Whitespace}`
| `${Whitespace}${infer Rest}`
? Trim<Rest>
: S;