티스토리 뷰

Typescript

[TS] Enums

codeyun2 2023. 5. 8. 17:38

Enums: 특정 값들을 모아둔 자료형

숫자형 이넘(Numeric enums)

enum Direction {
  Up = 1,
  Down, // 2
  Left, // 3
  Right, // 4
}

초기값부터 +1씩 증가

 

enum Direction {
  Up, // 0
  Down, // 1
  Left, // 2
  Right, // 3
}

지정하지 않는 경우 0부터 1씩 증가

 

- 사용 예시

enum UserResponse {
  No = 0,
  Yes = 1,
}
 
function respond(recipient: string, message: UserResponse): void {
  // ...
}
 
respond("Princess Caroline", UserResponse.Yes);

 

문자형 이넘(String enums)

enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT",
}

 

이종 이넘(Heterogeneous enums)

enum BooleanLikeHeterogeneousEnum {
  No = 0,
  Yes = "YES",
}

숫자형 + 문자형 이넘을 만들 수는 있지만 이렇게 사용하지 않는 것을 권장

 

계산된 멤버와 상수 멤버(Computed and constant members)

enum FileAccess {
  // 상수 멤버
  None,
  Read = 1 << 1,
  Write = 1 << 2,
  ReadWrite = Read | Write,
  // 계산된 멤버
  G = "123".length,
}

 

상수 열거형 표현식

  1. 리터럴 열거형 표현식 (기본적으로 문자 리터럴 또는 숫자 리터럴)
  2. 이전에 정의된 다른 상수 열거형 멤버에 대한 참조 (다른 열거형에서 시작될 수 있음)
  3. 괄호로 묶인 상수 열거형 표현식
  4. 상수 열거형 표현식에 단항 연산자 +, -, ~ 를 사용한 경우
  5. 상수 열거형 표현식을 이중 연산자 +, -, *, /, %, <<, >>, >>>, &, |, ^ 의 피연산자로 사용할 경우

상수 열거형 표현식의 값이 NaN이거나 Infinity면 컴파일 시 오류 발생함

 

런타임에서의 이넘(Enums at runtime)

enum E {
  X,
  Y,
  Z,
}
 
function f(obj: { X: number }) {
  return obj.X;
}
 
// E가 X라는 숫자 프로퍼티를 가지고 있기 때문에 동작
f(E);

 

컴파일 시점에서 이넘(Enums at compile time)

keyof보다 keyof typeof 사용

enum LogLevel {
  ERROR,
  WARN,
  INFO,
  DEBUG,
}

// type LogLevelStrings = 'ERROR' | 'WARN' | 'INFO' | 'DEBUG'; // 아래와 동일
type LogLevelStrings = keyof typeof LogLevel;
 
function printImportant(key: LogLevelStrings, message: string) {
  const num = LogLevel[key];
  if (num <= LogLevel.WARN) {
    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 a message");

 

역 매핑(Reverse mappings)

이넘 값에서 이넘 키로 역 매핑 받음

enum Enum {
  A,
}
 
let a = Enum.A;
let nameOfA = Enum[a]; // "A"

 

 

 

 

* 참고

타입스크립트 핸드북(공식)

타입스크립트 핸드북

 

2023.05.08

'Typescript' 카테고리의 다른 글

[TS] 인터페이스  (0) 2023.04.27
[TS] 함수  (0) 2023.04.26
[TS] 타입(자료형)  (0) 2023.04.25
[TS] 타입 설정 예시(interface, select event, 함수, 객체, undefined)  (0) 2023.04.20
[TS] 기본 개념  (0) 2023.04.14
댓글
공지사항