literal
의 뜻은 변하지 않는 데이터를 의미하는데 즉, 단어의 뜻을 보면 알 수 있듯 리터럴 타입은 특정한 값을 나타내는 타입이다. 해당하는 값이 특정한 리터럴 타입을 가져야하고, 값이 다르다면 에러가 발생한다. 특정 값의 사용을 강제하고자 할 때 사용된다고 한다. 또한 허용되는 타입이 정해져 있기 때문에 코드의 가독성도 높아진다.
리터럴 타입은 문자열, 숫자, 불리언 값 등에 사용이 된다. 이제 예시와 함께 알아보자.
let gender: "male" | "female";
gender = "male";
gender = "female";
위 코드를 보면 gender라는 변수는 "male", "female" 두 가지 문자열만 허용을 하는 리터럴 타입을 가진다. 만약 여기서 gender = "other";
이라는 코드를 추가하면 어떻게 될까?
위 캡처를 보면 알 수 있듯 우리는 정해진 리터럴 타입과 맞지 않는 값을 할당한다면 에러가 발생한다.
숫자형도 문자열과 동일한 흐름이다. 단지 타입이 숫자로 바뀌었을 뿐이다. 몇 가지 숫자를 할당하고 해당 값과 다른 값이 할당된다면 에러를 반환한다.
let speed: 50 | 100 | 150 | 200;
speed = 50;
speed = 100;
speed = 250; // Error
불리언 타입 또한 타입이 불리언으로 바뀐 게 전부다. 만약 'true'를 할당한다면 반드시 해당하는 리터럴 타입을 가지는 변수에 'true'를 할당해야만 한다.
let isTrue: true;
isTrue = true;
isTrue = false; // Error
타입스크립트는 객체에도 리터럴 타입을 사용할 수 있다.
let person: { name: "John", age: 25 };
person = { name: "John", age: 25 };
person = { name: "Alice", age: 30 }; // Error: 다른 값 할당
person = { name: "John" }; // Error: age 속성이 없음
객체에 다른 값이 할당되거나 모든 속성이 없다면 에러가 발생한다.
타입스크립트에서 타입에 별칭을 지정할 수 있는 기능이다.
type CardinalDirection = 'North' | 'East' | 'South' | 'West';
let direction: CardinalDirection;
direction = 'North';
direction = 'Northeast'; // Error
위 코드를 보면 동서남북 중에 하나의 타입을 가지도록 지정을 하고 원하는 변수에 리터럴 타입으로 설정을 해주면 된다. 그리고 리터럴 타입으로 설정한 변수에 해당되지 않는 값이 할당된다면 에러가 발생한다.