타입스크립트에서 enum을 사용하면 자바스크립트에는 없는 타입이기 때문에
꽤 긴 즉시 실행 함수에 대한 코드가 생성되고, tree-shaking이 되지 않는다
const enum을 사용하면 역방향 찾기를 지원하지 않아
자바스크립트 객체와 비슷해지고
enum에 대한 자바스크립트 코드를 생성하는 대신 열거형 멤버의 값을 채워 넣는다
다른 코드에서 const enum의 채워넣기를 하는 것은 위험하다
어떤 값을 넣어도 0, 1, 2 등의 열거형 값만을 반환하기 때문
-> 각 열거형에 대한 문자열 값을 지정해준다면 고유 값을 갖는 enum type이 생성된다
타입스크립트 프로그래밍 책에서도 되도록 멀리하라고 했는데
굳이 사용하였다
이유는 const enum string은 쓸 데 없는 코드를 생성하지 않고, 객체 처럼 사용 가능
가독성을 위해 충분히 도움이 될 것이라 생각함
특정 값을 갖는 객체의 경우 const enum 사용하여
크로스 체크를 하는 용도로 사용할 수 있을 것 같았다
객체를 사용함으로도 충분히 가독성을 지킬 수 있지만
함수를 사용한다면 매개변수에 객체 전체를 넘기는 것은 굉장히 비효율적이고
값으로 원시타입을 전해주기 때문에 보장할 수 없다
const color = {
yellow: 'yellow',
black: 'black',
red: 'red'
}
const settingColor = (color: string) => {
setColor(color)
}
settingColor(color.yellow)
이와 같이 작성했을 때 충분히 가독성은 지킬 수 있지만
어떤 코드가 들어와도 인자가 string 이기만 하다면 문제를 일으키지 않는다
const enum EColor = {
yellow: 'yellow',
black: 'black',
red: 'red'
}
const settingColor = (color: EColor) => {
setColor(color)
}
settingColor(EColor.yellow)
이렇게 객체 대신 const enum string을 사용하는 것 만으로
값 자체를 보장할 수 있게 된다..
유니온 타입을 사용할 경우
const color {
yellow = 'yellow',
black = 'black',
red ='red'
}
type Color = 'yellow' | 'black' | 'red'
const settingColor = (color: Color) => {
setColor(color.yellow)
}
settingColor(color.yellow)
가독성 + 귀찮음..?