Post

타입스크립트 - ENUM

ENUM (열거형)

원래 자바스크립트에는 없는 타입이지만, 자바스크립트의 값으로 사용할 수 있는 특이한 타입
여러 상수를 나열하는 목적으로 사용함

enum Level{
  NOVICE,
  INTERMEDIATE,
  ADVANCED,
  MASTER
}

enum에 존재하는 이름을 멤버라고 부른다.
위의 코드에서는 NOVICE, INTERMEDIATE, ADVANCED, MASTER가 멤버

enum은 사라지지 않고, 자바스크립트 코드로 남는다.

1
2
3
4
5
6
7
8
var level;

(function (level){
  Level[Level['NOVICE']=0]="NOVICE"
  Level[Level['INTERMEDIATE']=1]="INTERMEDIATE"
  Level[Level['ADVANCED']=2]="ADVANCED"
  Level[Level['MASTER']=3]="MASTER"
})(Level || Level = {})
1
2
3
4
5
6
7
8
9
10
var Level = {
  0: "NOVICE",
  1: "INTERMEDIATE",
  2: "ADVANCED",
  3: "MASTER",
  NOVICE: 0,
  INTERMEDIATE: 1,
  ADVANCED: 2,
  MASTER: 3
};

0 대신 다른 숫자를 할당할 수 있고, 숫자를 할당하지 않으면 이전에 할당된 값에서 1을 더한 값을 저절로 할당함

1
2
3
4
5
6
enum Level {
  NOVICE= 3,
  INTERMEDIATE, // 4
  ADVANCED= 7,
  MASTER; //8
}
  • INTERMEDIATE는 NOVICE에 할당된 값 + 1
  • MASTER는 ADVANCED에 할당된 값 + 1

문자열도 할당이 가능하지만, 전부 직접 값을 입력해야한다.

1
2
3
4
5
6
enum Level {
  NOVICE, // 0
  INTERMEDIATE = '중급',
  ADVANCED = '고급',
  MASTER; // Error!
}
  • NOVICE는 값이 할당되지 않았기때문에 자동으로 0 할당
  • MASTER는 에러 발생!
    • INTERMEDIATE,ADVANCED이 문자열이 할당되었기 때문에 오류 발생!

enum 타입의 속성은 값으로도 활용 가능

enum[enum_멤버] = enum 멤버 이름

1
2
3
4
5
6
7
8
9
enum Level {
  NOVICE,
  INTERMEDIATE,
  ADVANCED,
  MASTER
}

const a = Level.NOVICE; // 0
const b = Level[Level.NOVICE]; // "NOVICE";

enum은 브랜딩을 위해 사용하면 좋다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
enum Money {
  WON,
  DOLLAR
}

interface Won {
  type: Money.WON;
}
interface Dollar {
  type: Money.DOLLAR;
}

function WonOrDollar(param: Won | Dollar) {
  if (param.type === Money.WON) {
    param; // Won
  } else {
    param; // Dollar
  }
}
This post is licensed under CC BY 4.0 by the author.