Typescript 문서 - 07
Enums
Enums을 사용하면 상수를 정의할 수 있다.Numeric enums
enum Direction {
Up = 1,
Down,
Left,
Right
}
// Up: 1, Down: 2, Left: 3, Right: 4
enum의 첫 번째 요소가 초기화하지 않았다면 값은 0이 지정된다.// enum 사용법
enum Response {
No = 0,
Yes = 1,
}
function respond(recipient: string, message: Response): void {
// ...
}
respond("Princess Caroline", Reaponse.Yes);
숫자 열거형은 1) 계산된 상수 2) 숫자 상수 혼합 가능하다. 아래와 같은 경우는 사용하지 못한다.enum E {
A = getSomeValue(),
B, // Error!(A는 상수로 초기화되지 않으므로, B도 초기화해주어야 한다.)
}
String enums
문자열 리터럴 또는 문자열 열거형 멤버로 초기화되어야 한다.enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT"
}
문자열 enum은 숫자처럼 자동 증가할 수 없지만, 각각의 멤버에 초기화해주는 것이 좋다.Heterogeneous enums
아래의 방법으로 하지 않는 것이 좋다.enum BooleanLikeHeterogeneousEnum {
No = 0,
Yes = "YES",
}
Computed and constant members
열거형 멤버는 다음과 같은 경우 상수로 간주한다.- 열거형의 첫 번째 멤버이며 초기화하지 않은 경우에는 0이 할당된다.
enum E { X } - 아래와 같은 경우 상수 열거식이다.
- 리터럴 enum 표현식 (문자열 리터럴 또는 숫자 리터럴)
- 이전에 정의된 상수 열거형 멤버에 대한 참조
- 괄호 안의 상수 enum 표현식
- 상수 열거 표현식에 적용된
+,-,~단항 연산자 중 하나 - 피연산자로 상수 enum 표현식이 있는 이진 연산자
+,-,*,/,%,<<,>>,>>>,&,|,^
NaN 또는 Infinity는 컴파일 타임 오류이다.enum FileAccess {
// constant members
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write,
// computed member
G = "123".length
}
Enums at runtime
열거형은 런타임에 존재하는 실제 객체이다.Reverse mappings
열거형 값에서 열거형 이름으로 역 매핑을 할 수 있다.enum Enum {
A
}
let a = Enum.A;
let nameOfA = Enum[a]; // "A"
TypeScript는 JavaScript와 같은 걸로 컴파일한다.var Enum;
(function (Enum) {
Enum[Enum["A"] = 0] = "A";
})(Enum || (Enum = {}));
var a = Enum.A;
var nameOfA = Enum[a]; // "A"
const enums
const enum은 상수 enum 표현식만 사용할 수 있으며, 일반 enum과 달리 컴파일하는 동안 완전히 제거된다.const enum Directions {
Up,
Down,
Left,
Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right]
생성된 코드는 다음과 같다.var directions = [0 /* Up */, 1 /* Down */, 2 /* Left */, 3 /* Right */];
Ambient enums
이미 존재하는 enum 타입의 형태를 설명하는 데 사용된다.declare enum Enum {
A = 1,
B,
C = 2
}
Ambient와 Non-ambient enum의 차이점 중 하나는 일반적인 enum에서 초기화 코드가 없는 멤버는 상수 멤버로 인식한다는 것이다. 또한 초기화 코드가 없는 enum 멤버는 항상 계산된 것으로 간주한다.enum의 종류와 내용이 이렇게 많을 줄이야…
댓글
댓글 쓰기