728x90
Enums
이넘(Enums)은 특정 값들의 집합을 의미하는 자료형이다.
숫자형 이넘
enum Ticket {
R = 1,
S,
A
}
숫자형 이넘은 초기값을 정의하면 차례대로 1씩 증가한다. 만약 초기값을 정의하지 않으면 0부터 1씩 증가한다.
enum Response {
No = 0,
Yes = 1,
}
function response(recipient: string, message: Response): void {
// ...
}
response('hello', Response.Yes)
또한 숫자형 이넘은 리버스 매핑을 할 수 있다. 리버스 매핑이란 이넘의 key로 value를 얻을 수 있고, value로도 key를 얻을 수 있는 특징을 말한다.
enum Enum {
A
}
const a = Enum.A // key로 value 얻기
const keyName = Enum[a] // value로 key 얻기
문자형 이넘
문자형 이넘은 숫자형 이넘과 다르게 이넘 값 전부 초기화를 해주어야 한다.
enum Direction {
Up = "Up",
Down = "Down"
}
이넘에 문자와 숫자를 혼합하여 생성할 순 있지만 같은 타입의 이넘을 사용하는것이 좋다.
런타임 시점에서의 이넘
이넘은 런타임시에 객체 형태로 존재한다.
enum E {
X, Y, Z
}
function getX(obj: {X: number}) {
return obj.X
}
getX(E)
컴파일 시점에서의 이넘 특징
런타임 시점에서는 객체이지만 keyof를 사용할 때는 keyof typeof를 사용한다.
enum Log {
ERROR,WANR,INFO,DEBUG
}
type LogLevelStrings = keyof typeof Log;
function printImportant(key: LogLevelStrings, message: string) {
const num = Log[key]
if (num <= Log.WANR) {
console.log(`Log level key is ${key}`)
console.log(`Log level value is ${num}`)
console.log(`Log level message is ${message}`)
}
}
printImportant('ERROR', 'This is message')
사용
enum Answer {
Yes = 'Y',
No = 'N'
}
function ask(answer: Answer) {
if (answer === Answer.Yes) console.log('정답')
if (answer === Answer.No) console.log('오답')
}
ask(Answer.Yes)
728x90
'Javascript' 카테고리의 다른 글
타입스크립트 - 제네릭 (0) | 2021.04.08 |
---|---|
타입스크립트 - 클래스 (0) | 2021.04.08 |
타입스크립트 - 연산자를 통한 타입 정의 (0) | 2021.04.08 |
타입스크립트 - 인터페이스, 타입별칭 (0) | 2021.04.08 |
타입스크립트 - 기본타입과 함수 타입 정의 (0) | 2021.04.07 |
댓글