Disclosure

Most of the problems under my TypeHero Challenges folder were either obtained from typehero.dev or from type-challenges repo. Purpose of these articles are just to document my approaches for my easy reference. Please visit the respective links for more info.

Link to original

Problem Description

Implement Trim<T> which takes an exact string type and returns a new string with the whitespace from both ends removed.

For example:

type trimmed = Trim<'  Hello World  '> // expected to be 'Hello World'

Solutions

Approach 1: Using infer

type Whitespace = ' ' | '\t' | '\n';
 
type Trim<S extends string> = S extends `${Whitespace}${infer Rest}` | `${infer Rest}${Whitespace}`
	? Trim<Rest>
	: S;
 
type XXX = Trim<'str   '>