0Pricing
TypeScript Academy · 강의

템플릿 리터럴 타입 기초

유니언과 자리 표시자로 문자열 타입을 만듭니다.

템플릿 리터럴 타입 기초은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

타입 수준의 문자열

템플릿 리터럴 타입은 다른 문자열 타입을 결합하여 새로운 문자열 리터럴 타입을 만듭니다. 런타임 템플릿 문자열과 같은 백틱 및 자리 표시자 구문을 사용하지만, 순수하게 타입 수준에서 작동합니다.

간단한 템플릿 리터럴 타입

Greeting이라는 타입 별칭이 Hello, 라는 텍스트 뒤에 Name 타입을 위한 자리 표시자가 오는 템플릿 리터럴로 정의되었다고 생각해 보세요. Name이 'Ada' 리터럴이면 Greeting은 'Hello, Ada' 리터럴 타입이 됩니다.

type Name = "Ada"
// type Greeting = template literal: Hello, then Name
// Greeting is the string literal type "Hello, Ada"
const g: "Hello, Ada" = "Hello, Ada"
console.log(g)

자리 표시자에 다른 타입 넣기

자리 표시자 안에는 리터럴, 타입 매개변수, 유니온 등 문자열과 유사한 타입을 무엇이든 넣을 수 있습니다. TypeScript는 이를 주변 텍스트에 삽입하여 새로운 리터럴 타입을 만듭니다.

type World = "World"
// A template literal type with text Hello,  and placeholder World
// yields the literal "Hello, World"
const hw: "Hello, World" = "Hello, World"
console.log(hw)

유니온을 결합하면 변형이 늘어남

자리 표시자가 유니온을 포함하면 템플릿은 모든 구성원에 걸쳐 확장됩니다. 'a' | 'b'와 고정된 접미사를 결합한 템플릿은 각 조합으로 이루어진 유니온을 만듭니다.

type Side = "left" | "right"
// template: Side followed by -margin
// expands to "left-margin" | "right-margin"
const m: "left-margin" | "right-margin" = "left-margin"
console.log(m)

여러 자리 표시자를 결합하면 경우의 수가 곱해짐

두 유니온 자리 표시자는 모든 조합을 만듭니다. 구분 기호를 사이에 두고 'sm' | 'lg' 크기와 'red' | 'blue' 색상을 결합하면 네 가지 리터럴 타입이 만들어집니다.

type Size = "sm" | "lg"
type Color = "red" | "blue"
// template Size-Color expands to 4 combinations
const c: "sm-red" | "sm-blue" | "lg-red" | "lg-blue" = "lg-blue"
console.log(c)

이 기능이 유용한 이유

템플릿 리터럴 타입을 사용하면 문자열 클래스 이름, 이벤트 이름, 경로처럼 일정한 규칙을 따르는 문자열 집합을 정확하게 표현할 수 있습니다. 따라서 컴파일러가 실행 전에 잘못된 문자열을 거부합니다.

type Prefix = "btn"
type Variant = "primary" | "ghost"
// template Prefix--Variant => "btn--primary" | "btn--ghost"
const cls: "btn--primary" | "btn--ghost" = "btn--primary"
console.log(cls)

숫자와 불리언의 문자열 변환

템플릿 리터럴 타입에 넣은 문자열이 아닌 타입은 문자열 형태로 강제 변환됩니다. 숫자 리터럴 42는 결과 문자열 타입 안에서 42라는 텍스트가 됩니다.

type Id = 42
// template id- followed by Id => "id-42"
const x: "id-42" = "id-42"
console.log(x)

제네릭 자리 표시자 사용하기

제네릭 함수는 인수의 리터럴 타입에서 템플릿 리터럴 반환 타입을 만들 수 있으므로, 각 호출 위치에서 정확한 문자열을 알 수 있습니다.

function prefixed<T extends string>(s: T) {
  return ("app-" + s) as "app-" extends string ? string : never
}
console.log(prefixed("home")) // app-home

입력 제한하기

값이 템플릿 리터럴 타입과 일치하도록 요구할 수 있습니다. 설명된 패턴에 맞는 문자열만 허용되므로 컴파일 시점에 오타를 찾아낼 수 있습니다.

type Pixel = "left" | "right"
function setSide(s: Pixel) { return s }
console.log(setSide("left"))
// setSide("top") // Error: not assignable

넓은 문자열 타입은 패턴을 무너뜨림

자리 표시자가 리터럴이 아니라 넓은 string 타입이면 템플릿 전체가 string으로 축약됩니다. 구체성을 유지하려면 리터럴 입력이 필요하며, 이를 위해 as const를 사용하는 경우가 많습니다.

const dynamic: string = "anything"
// a template using dynamic yields just string, not a precise literal
const result: string = "prefix-" + dynamic
console.log(result)

활용할 수 있는 곳

템플릿 리터럴 타입은 문자열이 일정한 구조를 따르는 모든 곳에 적합합니다. 예를 들면 CSS 유틸리티 클래스, 접두사가 붙은 식별자, 쿼리 키, 이벤트 이름이 있습니다. 문자열 규칙을 컴파일러가 검사하는 계약으로 바꿀 수 있습니다.

type Theme = "light" | "dark"
// template theme- followed by Theme => "theme-light" | "theme-dark"
const t: "theme-light" | "theme-dark" = "theme-dark"
console.log(t)

빠른 확인

템플릿 리터럴 타입의 기본 개념에 대한 이해도를 확인해 보세요.

복습

템플릿 리터럴 타입은 자리 표시자를 주변 텍스트에 삽입하여 문자열 리터럴 타입을 만듭니다. 유니온 자리 표시자는 모든 조합으로 확장되고, 여러 유니온은 모든 경우의 수를 만듭니다. 문자열이 아닌 리터럴은 텍스트 형태로 변환됩니다. 넓은 string 자리 표시자는 결과를 string으로 축약하므로 정확한 타입을 얻으려면 리터럴 입력이 필요하며, 이를 위해 as const를 자주 사용합니다. 이 타입은 문자열 규칙을 컴파일러가 검사하도록 만듭니다.

자주 묻는 질문

“템플릿 리터럴 타입 기초” 강의는 무료인가요?

네 — “템플릿 리터럴 타입 기초” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“템플릿 리터럴 타입 기초”에서 뭘 배우나요?

유니언과 자리 표시자로 문자열 타입을 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“템플릿 리터럴 타입 기초” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 템플릿 리터럴 타입 기초
  2. 구조화된 문자열 모델링
  3. 문자열 유니언과 자동 완성
  4. 내장 문자열 조작 타입
← TypeScript Academy(으)로 돌아가기