JS에는 존재하지 않고 TS에서만 사용할 수 있는 특별한 타입. 여러 개의 값을 나열하는 용도로 사용
enum Role {
ADMIN,
USER,
GUEST,
}→ 3개의 멤버 ADMIN, USER, GUEST를 나열한 열거형 타입을 하나 만듬
enum의 각 멤버에는 다음과 같이 숫자를 할당할 수 있음
enum Role {
ADMIN = 0,
USER = 1,
GUEST = 2,
}또 다음과 같이 enum의 멤버들을 값으로도 활용할 수 있음
// enum 타입
// 여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입
enum Role {
ADMIN = 0,
USER = 1,
GUEST = 2,
}
const user1 = {
name: "이정환",
role: Role.ADMIN, //관리자
};
const user2 = {
name: "홍길동",
role: Role.USER, // 회원
};
const user3 = {
name: "아무개",
role: Role.GUEST, // 게스트
};→ user1.role에는 0 / user2.role에는 1/ user3.role에는 2
유저의 권한과 같은 여러 개의 멤버를 갖는 값을 숫자로 표기할 때는 enum을 이용해 보다 안전하고 직관적으로 관리할 수 있음
enum에 숫자 값을 직접할당하지 않아도 0부터 1씩 늘어나는 값으로 자동 할당됨
// enum 타입
// 여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입
enum Role {
ADMIN, // 0 할당(자동)
USER, // 1 할당(자동)
GUEST, // 2 할당(자동)
}
const user1 = {
name: "이정환",
role: Role.ADMIN, // 0
};
const user2 = {
name: "홍길동",
role: Role.USER, // 1
};
const user3 = {
name: "아무개",
role: Role.GUEST, // 2
};자동할당되는 값은 기본적으로 0부터 시작함. 만약 이 값을 변경하고 싶으면 다음과 같이 시작하는 위치에 값을 직접 할당해 주면 됨. 그럼 자동으로 그 아래의 멤버들은 1씩 증가된 값으로 할당됨
// enum 타입
// 여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입
enum Role {
ADMIN = 10, // 10 할당
USER, // 11 할당(자동)
GUEST, // 12 할당(자동)
}
const user1 = {
name: "이정환",
role: Role.ADMIN, // 10
};
const user2 = {
name: "홍길동",
role: Role.USER, // 11
};
const user3 = {
name: "아무개",
role: Role.GUEST, // 12
};enum에는 멤버에 숫자 말고도 문자열 값도 할당할 수 있음.
따라서 만약 다음과 같이 국가별 언어를 열거하는 enum이 필요하면 각 멤버에 문자열 값을 할당하면 됨
enum Language {
korean = "ko",
english = "en",
}이렇듯 모든 멤버의 값이 문자열인 enum을 특별히 문자열 enum이라고 부름. 숫자형 enum과 동일하게 다음과 같이 프로퍼티의 값으로 사용할 수 있음
enum Role {
ADMIN,
USER,
GUEST,
}
enum Language {
korean = "ko",
english = "en",
}
const user1 = {
name: "이정환",
role: Role.ADMIN, // 0
language: Language.korean,// "ko"
};enum은 컴파일 될 때 다른 타입들 처럼 사라지지 않고 JS 객체로 변환됨. 따라서 우리가 위에서 사용했던 것 처럼 값으로 사용할 수 있음
[변환된 결과]
var Role;
(function (Role) {
Role[Role["ADMIN"] = 0] = "ADMIN";
Role[Role["USER"] = 1] = "USER";
Role[Role["GUEST"] = 2] = "GUEST";
})(Role || (Role = {}));
var Language;
(function (Language) {
Language["korean"] = "ko";
Language["english"] = "en";
Language["japanese"] = "jp";
})(Language || (Language = {}));
const user1 = {