Implement `Trim<T>` which takes an exact string type and returns a new string with the whitespace from both ends removed. Master TypeScript template literal types in this medium-level challenge on TypeScriptPro.
In this medium-level challenge, you'll implement Trim<T> which takes an exact string type and returns a new string with the whitespace from both ends removed.
Implement Trim<T> which takes an exact string type and returns a new string with the whitespace from both ends removed.
For example
[object Object]Change the following code to make the test cases pass (no type check errors).
// Video Solution: https://youtube.com/watch?v=fALHOdurTDM
/* _____________ Your Code Here _____________ */
type Trim<S extends string> = any
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '../helpers'
type cases = [
Expect<Equal<Trim<'str'>, 'str'>>,
Expect<Equal<Trim<' str'>, 'str'>>,
Expect<Equal<Trim<' str'>, 'str'>>,
Expect<Equal<Trim<'str '>, 'str'>>,
Expect<Equal<Trim<' str '>, 'str'>>,
Expect<Equal<Trim<' \n\t foo bar \t'>, 'foo bar'>>,
Expect<Equal<Trim<''>, ''>>,
Expect<Equal<Trim<' \n\t '>, ''>>,
]
Unlock 102+ medium, hard, and extreme challenges to master advanced TypeScript.
One-time payment. Lifetime access.
type Whitespace = ' ' | '\n' | '\t'
type Trim<S extends string> = S extends `${Whitespace}${infer After}`
? Trim<After>
: S extends `${infer Before}${Whitespace}`
? Trim<Before>
: SHow it works:
Whitespace that represents all whitespace charactersS to be a string with extends stringS extends ${Whitespace}${infer After} matches the string type and captures the rest of the string into After? Trim<After> recursively calls Trim with the rest of the string: S returns the string if it doesn't start or end with a whitespace character (base case)This challenge helps you understand TypeScript's template literal types and how to apply this concept in real-world scenarios.
This challenge is originally from here.