반응형
1. 숫자형 이넘
enum Response {
No = 0,
Yes = 1,
TEST
}
function respond(message: Response): void {
console.log(message)
}
respond( Response.Yes);
- 위와 같이 숫자형 이넘을 선언할 때 초기 값을 주면 초기 값부터 차례로 1씩 증가합니다.
- 초기 값을 주지 않으면 0부터 차례로 1씩 증가합니다.
2. 문자형 이넘
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
- 문자형 이넘은 이넘 값 전부 다 특정 문자 또는 다른 이넘 값으로 초기화해줘야 합니다.
- 문자형 이넘에는 숫자형 이넘과는 다르게 auto-incrementing이 없습니다. 대신 디버깅을 할 때 숫자형 이넘의 값은 불명확하게 나올 떄가 있지만 문자형 이넘은 항상 명확한 값이 나와 읽기 편합니다.
3. 런타임 시점에서의 이넘 특징
enum E {
X, Y, Z
}
function getX(obj: { X: number }) {
return obj.X;
}
getX(E); // 이넘 E의 X는 숫자이기 때문에 정상 동작
- 이넘은 런타임시에 실제 객체 형태로 존재합니다.
4. 타입 시스템 시점에서의 이넘 특징
enum LogLevel {
ERROR, WARN, INFO, DEBUG
}
// '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');
- 이넘이 런타임 시점에서는 실제 객체지만 keyof를 사용할 때 주의해야 합니다. 일반적으로 keyof를 사용해야 되는 상황에서는 대신 keyof typeof를 사용하세요.
4. 리버스 매핑(Reverse Mapping)
enum Enum {
A
}
let a = Enum.A; // 키로 값을 획득 하기
let keyName = Enum[a]; // 값으로 키를 획득 하기
- 리버스 매핑은 숫자형 이넘에만 존재하는 특징입니다. 이넘의 키(key)로 값(value)을 얻을 수 있고 값(value)으로 키(key)를 얻을 수도 있습니다. 위와 같이 말이죠.
반응형
'기억보단 기록을 > Typescript' 카테고리의 다른 글
[Typescript] Section 09. 제네릭 (0) | 2023.05.20 |
---|---|
[Typescript] Section 08. Class (0) | 2023.05.20 |
[Typescript] Section 06. 연산자를 이용한 타입 정의 (0) | 2023.05.20 |
[Typescript] Section 05. 타입 별칭, Type vs Interface (0) | 2023.05.20 |
[Typescript] Section 04. 인터페이스 (0) | 2023.05.20 |