처음부터 Str extends ``x${infer Rest}x``를 하면 좌우를 동시에 지울 수 있지 않을까요? 좋은 생각이지만 이 경우는 xxtestxx일 때만 동작합니다. 'xxtest'나 'testxx'와 같이 한쪽에만 x가 있는 경우에는 지워지지 않습니다. 어떤 타입을 만든 뒤에는 여러 테스트 사례를 생각해서 어떠한 경우에도 다 돌아가도록 만들어야 합니다.
양쪽 공백을 지우는 함수는 RemoveX를 응용하여 다음과 같이 만들면 됩니다.
type RemoveEmpty<Str> = Str extends ` ${infer Rest}`
? RemoveEmpty<Rest>
: Str extends `${infer Rest} ` ? RemoveEmpty<Rest> : Str;
type Removed = RemoveEmpty<' test '>
// type Removed = "test"