enum
키워드 + PascalCase
조합으로 생성// 열거형 소개 코드
enum Prize {
Gold = 100,
Silver, // 101
Bronze // 102
// 알아서 값이 증가하는 것을 확인할 수 있음 => 숫자 열거형
}
즉시 실행 함수 형태로 남아있는 모습
값 초기화 생략 가능하고 이를 생략했을 경우 경우 기본이 숫자형 열거 (0,1,2로 값이 할당됨)
enum Order {
First, // 1
Second, // 2
Third // 3
}
첫 번째에 열거하는 항목에 값을 지정해주면 알아서 값이 증가
하지만 어떠한 규칙을 지정할 수 없고 1씩만 증가함
enum Prize {
Gold = 100,
Silver, // 101
Bronze // 102
}
enum Prize2 {
Gold = 100,
Silver = 200,
Bronze // 201
}
enum Prize2 {
Gold = 'Gold',
Silver = 'Silver',
Bronze // error
}
enum Prize2 {
First = 0,
Silver = 'Silver',
Bronze // error
}
enum BoolLikeEnum {
No = 0,
Yes = 'Yes'
}
enum Order {
First = 1,
Second = 2,
Third = 3
}
console.log(Order.First) // 1
console.log(Order[Order.First]) // First
console.log(Order) // 아래 이미지 확인
숫자형 열거 console로 확인 시 나오는 결과
enum Desk {
Color = 'White',
Width = 1400,
}
Desk.Color
Desk.Height // error : Property 'Height' does not exist on type 'typeof Desk'
Desk['Height']. // error : Cannot find name 'Height'
// => 다른 에러가 나오는 이유는 불완전한 접근을 허용하기 때문
const enum
은 이러한 점을 보완하기 위한 안전한 열거형이다enum
앞에 const
키워드를 명시const enum Desk {
Color = 'White',
Width = 1400,
}
keyof
, keyof typeof
와 조합하여 활용할 수 있다enum Language {
TypeScript = 'TS',
JavaScript = 'JS',
Java = 'JAVA',
Ruby = 'RB',
}
type LangCodeKey = keyof Language; // 허용되는 타입들
type LangCodeKeyType = keyof typeof Language; // 'TypeScript' | 'JavaScript' | 'Java' | 'Ruby'
/* ↑ 같은 거 ↓ */
type LangCodeKeyType = 'TypeScript' | 'JavaScript' | 'Java' | 'Ruby'
function getLang(langCode: LangCodeKeyType) {
console.log(langCode)
}
getLang('아무 언어'); // error
getLang('Python'); // error
getLang('TS');