"문자열 이름에 규칙이 있다면, 그 규칙 자체를 타입으로 만들 수 있어."
문자열 조합을 컴파일러에게 맡기기
템플릿 리터럴 타입은 값의 템플릿 문자열과 닮은 문법으로 문자열 리터럴 타입을 조합해. type Size = `${number}px`는 숫자 뒤에 px가 붙는 문자열을 나타내. type Axis = 'x' | 'y'를 넣어 이벤트 이름을 만들면 'onXChange' | 'onYChange'처럼 펼쳐져.
삽입 위치에 합집합이 여러 개 있으면 가능한 조합이 곱으로 펼쳐져. `${'a' | 'b'}-${1 | 2}`는 네 문자열 리터럴의 합집합이야. 작은 이름 체계에는 편리하지만 조합 수가 커지면 컴파일러와 사람 모두 부담을 느끼므로 범위를 제한해야 해.
대소문자 도구와 키 재매핑
TypeScript는 Uppercase<S>, Lowercase<S>, Capitalize<S>, Uncapitalize<S>를 제공해. 매핑된 타입의 as와 결합하면 데이터 프로퍼티에서 메서드 이름을 파생할 수 있어. 예컨대 name과 age에서 getName과 getAge를 만드는 식이지.
이 패턴의 장점은 관례를 문서에만 써 두지 않고 컴파일러가 검사하게 한다는 거야. 원본 키가 추가되면 대응하는 핸들러나 getter가 빠졌다는 사실도 드러난다. 반대로 외부 API 이름이 불규칙하다면 억지로 템플릿 규칙에 끼워 맞추지 말고 명시적 매핑을 쓰는 편이 정직해.
파생 API 이름에서 빛나
데이터 모양에서 메서드 이름을 만드는 라이브러리 API가 대표 용도야. React의 useState 관례처럼 useUser라는 훅에서 setUser라는 setter 이름을 파생하는 규칙을 템플릿 리터럴 타입으로 표현하고 검사할 수 있어.