열거형은 해당 타입으로 사용할 수 있는 값을 열거하는 것으로
키를 값에 할당하는 순서가 없는 자료구조다
키가 컴파일 타임에 고정된 객체
타입스크립트에만 존재하는 기능으로 컴파일 시
자바스크립트의 즉시 실행 함수가 생성되어 tree-shaking이 되지 않는다 -> 쓴다면 const enum을 사용하자
열거형의 이름은 단수 명사로, 첫 문자는 대문자로, key도 첫 문자는 대문자로 하는 것이 관례
enum Lang ={
Go,
Python,
Javascript
}
타입스크립트가 자동으로 열거형의 각 멤버의 숫자를 추론하지만
명시적으로 줄 수 있다
enum Lang ={
Go = 0,
Python = 1,
Javascript = 2
}
enum의 값은 객체나 배열처럼 참조가 가능하다
Lang.Go
Lang['Python']
Lang[0]
열거형은 여러개로 나눠 정의 후 합치도록 할 수도 있다
여러 열거형중 한 가지 값만 추론이 가능하기 때문에
명시적으로 값을 할당하는 것이 좋다
enum Lang = {
Go = 0,
Python = 1,
}
enum Lang = {
Javascript = 2
}
계산된 값을 사용할 수도 있고, 빠진 것은 추론도 한다
enum Lang ={
Go = 100,
Python = 200 + 300,
Javascript // 500의 다음 값인 501로 추론
}
열거형에 문자열 값과 문자열 + 숫자 혼합 값을 사용할 수 있다
enum 타입은 정의되지 않은 key 값에 대한 접근을 허용한다
사용 시 const enum을 사용하면 안전하게 사용 가능
const enum Lang ={
Go = 0,
Python = 1,
Javascript = 2
}
const enum 타입은 역방향 찾기를 지원하지 않으므로
자바스크립트 객체와 비슷해진다
Lang[0] // TS2476: const enum 멤버는 문자열 리터럴로만 접근할 수 있음