enum Direction {
Up,
Down,
Left,
Right
}
let dir: Direction = Direction.Up;
console.log(dir); // 0
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT"
}
let dir: Direction = Direction.Up;
console.log(dir); // "UP"
기술적으로 열거형은 숫자와 문자를 섞어서 사용할 수 있지만 굳이 그렇게 할 이유는 없습니다.
enum BooleanLikeHeterogeneousEnum {
No = 0,
Yes = "YES"
}
console.log(BooleanLikeHeterogeneousEnum.No); // 0
console.log(BooleanLikeHeterogeneousEnum.Yes); // "YES"
enum FileAccess {
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write,
G = "123".length
}
console.log(FileAccess.ReadWrite); // 6
console.log(FileAccess.G); // 3
const enum
을 사용하면 컴파일러가 열거형을 값으로 인라인 처리하여 성능 최적화를 할 수 있다.
const enum Directions {
Up,
Down,
Left,
Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right];
console.log(directions); // [0, 1, 2, 3]
enum E {
X,
Y,
Z,
}
function f(obj: { X: number }) {
return obj.X;
}
// E가 X라는 숫자 프로퍼티를 가지고 있기 때문에 동작하는 코드입니다.
f(E);
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");