템플릿 리터럴 타입(Template Literal Types)은 문자열 리터럴 타입을 템플릿 문자열 문법으로 조합해 새 문자열 유니언을 만드는 기능이다. 유니언을 넣으면 가능한 모든 조합이 나온다.
type Size = 'sm' | 'md'
type Variant = 'primary' | 'secondary'
type ClassName = `btn-${Variant}-${Size}`
// 'btn-primary-sm' | 'btn-primary-md' | 'btn-secondary-sm' | 'btn-secondary-md'
type Field = 'email' | 'password'
type Handler = `on${Capitalize<Field>}Change` // 'onEmailChange' | 'onPasswordChange'
type LocaleKey = `common.${string}` // 접두사 규칙만 강제- 이벤트 이름, CSS(Cascading Style Sheets) 클래스 규칙, i18n(Internationalization) 키, API(Application Programming Interface) 경로 패턴처럼 팀의 문자열 규칙을 타입으로 강제할 때 쓴다
Uppercase·Lowercase·Capitalize·Uncapitalize같은 내장 문자열 변환 타입과 함께 쓴다- 매핑된 타입의
as절과 합치면{ getName: …; getAge: … }처럼 키 이름을 바꾼 타입도 만들 수 있다 - 조합 수가 폭발하면 컴파일이 느려진다. 유니언 크기를 의식한다
문자열 규칙 대신 아예 값을 분리하는 방법은 enum과 as const 객체, 클래스 이름 조합을 런타임에서 다루는 도구는 cn 유틸리티(clsx·tailwind-merge·cva).