정확한 문자열 타입이고 양쪽 끝의 공백이 제거된 새 문자열을 반환하는 Trim<T>를 구현하십시오.
type Space=' '|"\n"|'\t'
type Trim<S extends string> =
S extends `${Space}${infer LeftTrimmed extends string}`?
LeftTrimmed extends `${infer RightTrimmed extends string}${Space}`?
Trim<RightTrimmed>
:Trim<LeftTrimmed>
:S extends `${infer RightTrimmed extends string}${Space}`?
Trim<RightTrimmed>
:S
type Space = ' ' | '\t' | '\n';
type Trim<S extends string> = S extends `${Space}${infer T}` | `${infer T}${Space}` ? Trim<T> : S;
extends문에서 유니온 타입을 쓸 생각은 차마 못한 것 같다.
아름다운 답이다
https://github.com/type-challenges/type-challenges/issues/481