enum은 typescript가 제공하는 기능으로, 열거형으로 이름이 있는 상수들의 집합을 정의한다. 그러니까 이름이 정해져 있는 상수들을 열거한 것들의 집합소라고 보면 된다.
상수들을 열거해놓으면 의도를 문서화하거나 구분되는 사례 집합을 더 쉽게 만들수 있다. typescript는 문자열, 숫자 기반의 열거형을 제공한다.
enum은 추상화의 수단으로 자주 사용된다.
ex) 제품의 다국어 지원
물론 리터럴 타입과 유니온으로 변수의 범위를 좁혀줄 수 있다. 하지만 다른 곳에서 코딩을 할 때 유니온 타입이 정확이 어떤 것이었는지 기억이 잘 나지 않거나 어떤 타입들이 있었는지 기억이 안나는 상황이 생긴다. 그런 경우를 위해서 enum으로 리터럴의 타입과 값에 이름을 붙여서 정확히 명시해주는 것이다.
typescript에서 enum은 객체이다.
하지만 분명히 차이점이 있다.
객체는 속성을 자유롭게 변경할 수 있는데 반해 enum은 속성을 변경할 수 없다. 그리고 enum은 속성값으로 string이나 number밖에 올 수 없다.