개요
리터럴 타입은 TypeScript에서 정확한 값 자체를 타입으로 지정하는 기능을 말한다.
예를 들면, 문자열 “hello”라는 값 자체를 타입으로 사용할 수 있다. 리터럴 타입은 특정 값만을 허용하는 형태의 타입을 지정할 때 유용하며, 이를 통해 정확한 값과 상수 기반의 타입 안정성을 제공한다.
리터럴 타입의 종류
1.
문자열 리터럴 타입 (String Literal Type)
문자열 리터럴 타입은 문자열의 특정 값을 타입으로 지정할 수 있게 해준다.
type Direction = "up" | "down" | "left" | "right";
let move: Direction;
move = "up"; // ✅ 허용
move = "left"; // ✅ 허용
move = "forward"; // ❌ 오류
TypeScript
복사
Direction 타입을 리터럴로 지정하면서 “up”, “down”, “left”, “right” 네 가지 값만 허용한다.
이 외의 값은 허용되지 않아 타입의 안정성을 보장한다.
2.
숫자 리터럴 타입 (Number Literal Type)
type DiceRoll = 1 | 2 | 3 | 4 | 5 | 6;
let roll: DiceRoll;
roll = 1; // ✅ 허용
roll = 2; // ✅ 허용
roll = 7; // ❌ 오류
TypeScript
복사
문자열 리터럴과 마찬가지로 특정 숫자 값만을 허용하는 타입을 지정할 수 있다.
3.
불리언 리터럴 타입 (Boolean Literal Type)
type YesOrNo = true | false;
let answer: YesOrNo;
answer = true; // ✅ 허용
answer = false; // ✅ 허용
answer = "yes"; // ❌ 오류: "yes"는 불리언 리터럴 타입이 아님
TypeScript
복사
리터럴 타입의 장점
1.
정확한 값 제한 : 리터럴 타입은 변수에 가질 수 있는 값의 범위를 정확하게 정의하므로 의도하지 않은 값의 사용을 방지할 수 있다.
2.
타입 안정성 : 사전에 정의된 값만 허용하기 때문에 실행 시 오류를 예방할 수 있다.
3.
코드 가독성 및 유지보수성 : 특정 값만 허용하는 상황에서는 리터럴 타입을 통해 코드의 가독성과 유지보수성이 향상된다.
리터럴 타입의 여러 활용 방안
1. 함수와 결합
type Status = "Error" | "Success" | "Cancel";
function printStatus(status: Status) {
console.log(`Status is: ${status}`);
}
printStatus("Error"); // ✅ 허용
printStatus("UnKnown"); // ❌ 오류 : Status에 없는 값.
TypeScript
복사
2. 리터럴 타입과 객체 속성
객체의 속성 타입에도 리터럴 타입을 사용할 수 있다.
예를 들어 특정 값만 가지는 객체를 정의할 수 있다.
interface Config {
theme: "light" | "dark";
layout: "grid" | "list";
}
const userConfig: Config = {
theme: "dark",
layout: "grid",
}
userConfig.theme = "blue" // ❌ 오류 : "dark"랑 "light"만 허용
TypeScript
복사
3. as Const 를 사용한 리터럴 타입
as const 를 사용하여 리터럴 타입을 자동으로 고정할 수 있다.
const COLORS = {
RED: "red",
BLUE: "blue",
} as const;
type Color = typeof COLORS[keyof typeof COLORS];
TypeScript
복사