type-challenges-solutions icon indicating copy to clipboard operation
type-challenges-solutions copied to clipboard

type-challenges-solutions/en/medium-trim

Open utterances-bot opened this issue 2 years ago • 3 comments

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

utterances-bot avatar Nov 05 '22 17:11 utterances-bot

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 avatar Nov 05 '22 17:11 gauravpan

@gauravpan interesting, can you explain step by step why it works?

ghaiklor avatar Nov 07 '22 07:11 ghaiklor

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;

albert-luta avatar Jan 28 '23 21:01 albert-luta