Typescript - enum

Jaemin Jung·2021년 12월 17일
0

Typescript

목록 보기
10/13
post-thumbnail

enum

이넘은 특정 값들의 집합을 의미하는 자료형이다.
나이키, 아디다스, 뉴발란스 셋 다 신발이라는 하나의 집합이다.
이러한 하나의 집합을 정의하는 것이 이넘이다.

숫자형 이넘

타입스크립트에서 숫자형 이넘은 다음과 같이 정의한다.

enum Shoes {
    // 기본값을 설정 가능하다.
    Nike = 10, // 10
    Adidas, // 11
    Sth, // 12
}

let myShoes = Shoes.Nike

console.log(myShoes); // 10;

기본적으로 enum에서 속성에 아무런 값을 설정하지 않으면 숫자 값이 된다.
이때 숫자형 이넘은 속성이 추가 되었을때 값이 1씩 증가한다.

리버스 매핑(Reverse Mapping)

리버스 매핑은 숫자형 이넘에만 존재하는 특징인데,
에넘의 키(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); // 메종 키츠네
  • TypeScript playground 에서 실행한 모습

속성에 문자열 값을 할당시켜주면 해당 문자가 출력된다.

문자형 이넘은 이넘 값 전부 다 특정 문자 또는 다른 이넘 값으로 초기화 해줘야한다.

숫자형 이넘과는 다르게 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'문자열을 인자로 전달 하였을때에는 에러가 발생한다 이넘을 전달하지 않았기 때문이다.

profile
내가 보려고 쓰는 블로그

0개의 댓글