이넘은 특정 값들의 집합을 의미하는 자료형이다.
나이키
, 아디다스
, 뉴발란스
셋 다 신발이라는 하나의 집합이다.
이러한 하나의 집합을 정의하는 것이 이넘이다.
타입스크립트에서 숫자형 이넘은 다음과 같이 정의한다.
enum Shoes {
// 기본값을 설정 가능하다.
Nike = 10, // 10
Adidas, // 11
Sth, // 12
}
let myShoes = Shoes.Nike
console.log(myShoes); // 10;
기본적으로 enum에서 속성에 아무런 값을 설정하지 않으면 숫자 값이 된다.
이때 숫자형 이넘은 속성이 추가 되었을때 값이 1씩 증가한다.
리버스 매핑은 숫자형 이넘에만 존재하는 특징인데,
에넘의 키(key)로 값(value)를 얻을 수 있고
값(value)로 키(key)를 얻을 수도 있다.
enum Enum {
A
}
let a = Enum.A; // 키로 값을 획득 하기
let keyName = Enum[a]; // 값으로 키를 획득 하기
타입스크립트에서 문자형 이넘은 다음과 같이 정의한다.
enum Brand {
memi = '메종 미네드',
meki = '메종 키츠네'
}
let myBrand = Brand.meki
console.log(myBrand); // 메종 키츠네
속성에 문자열 값을 할당시켜주면 해당 문자가 출력된다.
문자형 이넘은 이넘 값 전부 다 특정 문자 또는 다른 이넘 값으로 초기화 해줘야한다.
숫자형 이넘과는 다르게 auto-incrementing이 없다.
기술적으로 이넘에 문자와 숫자를 혼합하여 생성할 순 있지만 권고하지 않는다고 한다.
최대한 같은 타입으로 이루어진 이넘을 사용하는 것을 권장한다고 한다.
enum BooleanLikeHeterogeneousEnum {
No = 0,
Yes = "YES",
}
// 예제
enum Answer {
Yes = 'Y',
No = 'N'
}
function askQuestion(answer: Answer): void {
if (answer === Answer.Yes) {
console.log('정답입니다');
}
if (answer === Answer.No) {
console.log('오답입니다');
}
}
askQuestion(Answer.Yes);
askQuestion('Yes') // <- 에러 발생
일반적인 함수 실행시 이넘 안에 있는 데이터 집단으로만 제약을 줄 수 있다.
마지막줄에 'Yes'
문자열을 인자로 전달 하였을때에는 에러가 발생한다 이넘을 전달하지 않았기 때문이다.