Skip to content

Latest commit

 

History

History
80 lines (71 loc) · 1.53 KB

Enums.md

File metadata and controls

80 lines (71 loc) · 1.53 KB

Enums


Enums

  • 명명 상수 집합(a set of named numeric constants) 정의
  • enum 키워드로 정의
enum Direction {
    Up = 1,
    Down,  //2,   Up + 1
    Left,  //3, Down + 1
    Right  //4, Left + 1
}
  • 0 이상의 member로 구성
enum Direction {

} // no problem
console.log(Direction); // ???
  • member는 constant(상수) or computed(계산식)

  • constant(상수)인 경우

    • 초기값 없을 경우 이전 member 값 + 1
    • 초기값 없이 첫 member
    enum Direction {
      Up // 0
    }
  • a constant enum expression(상수 열거식)인 경우

    • 숫자 리터럴
    • member간 참조
    • 괄호로 묶인 경우  * +, -, ~ 단항 연산자 사용  * +, -, *, /, %, <<, >>, >>> 이항 연산자 사용 (NaN or Inifinity로 계산시 compile error)
  • 그 외에는 computed

enum FileAccess {
    // constant members
    None,
    Read    = 1 << 1,
    Write   = 1 << 2,
    ReadWrite  = Read | Write,
    // computed member
    G = "123".length
}
  • Enums are real objects for a reverse mapping
enum Enum {
    A
}
let a = Enum.A;
let nameOfA = Enum[Enum.A]; // "A"
  • never inlined, so 추가 생성 코드 및 indirect 비용을 줄이려면 enum 키워드 앞에 const를 붙여라
const enum Enum {
    A
}
let a = Enum.A;
let nameOfA = Enum[Enum.A]; // Error : A const enum member can only be accessed using a string literal.
  • const enum은 compile시 완전히 제거 됨
const enum Enum {
    A = 1,
    B = A * 2
}
let a = Enum.A;
//var a = 1 /* A */;