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
}
}
|