티스토리 뷰
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,
}
상수 열거형 표현식
- 리터럴 열거형 표현식 (기본적으로 문자 리터럴 또는 숫자 리터럴)
- 이전에 정의된 다른 상수 열거형 멤버에 대한 참조 (다른 열거형에서 시작될 수 있음)
- 괄호로 묶인 상수 열거형 표현식
- 상수 열거형 표현식에 단항 연산자 +, -, ~ 를 사용한 경우
- 상수 열거형 표현식을 이중 연산자 +, -, *, /, %, <<, >>, >>>, &, |, ^ 의 피연산자로 사용할 경우
상수 열거형 표현식의 값이 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 |
댓글
공지사항