더북(TheBook)

지역이나 이동수단의 수가 늘어나도 각각 City 타입과 Vehicle 타입에 추가하면 됩니다. ID 타입은 알아서 조합됩니다.

템플릿 리터럴 타입은 제네릭 및 infer와 함께 사용하면 더 강력합니다. 좀 더 어려운 예제로 좌우 공백이 있는 문자열 타입에서 공백을 제거하는 작업을 해보겠습니다. ' test ' 문자열 타입을 'test' 타입으로 만드는 것입니다. 책에서는 공백이 몇 개인지 잘 보이지 않으므로, 공백 대신 좌우의 x를 지우는 타입을 만들어보겠습니다. 'xxtestxx' 문자열 타입을 'test'로 만들면 됩니다.

type RemoveX<Str> = Str extends `x${infer Rest}` 
  ? RemoveX<Rest> 
  : Str extends `${infer Rest}x` ? RemoveX<Rest> : Str;
type Removed = RemoveX<'xxtestxx'>
// type Removed = 'test'

재귀 타입으로 만들어보았습니다. 복잡해 보이나요? 좀 더 쉽게 이해할 수 있게 한 단계씩 살펴보겠습니다. 먼저 알아두어야 할 것은 템플릿 리터럴 타입은 재귀 호출이 가능하다는 점입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.