더북(TheBook)

MoneyWater를 구분하는 코드입니다. 이 코드는 타입스크립트에서 에러가 발생하지 않고 if문에서 타입 구분도 잘 됩니다. 물론 자바스크립트에서도 에러가 발생하지 않습니다.

다만 코드가 의도한 바와 전혀 다르게 동작합니다. moneyliter를 구분하길 원했지만, 실제로 실행해보면 모두 money가 됩니다. 실제 코드에서는 Money.WON0이고, Water.LITER0이기 때문입니다. 따라서 else문으로 가지 않습니다. 같은 enum의 멤버끼리 비교해야만 의미가 있다는 점을 기억하세요.

enum 타입을 사용하되, 자바스크립트 코드가 생성되지 않게 할 수도 있습니다. const enum을 사용하면 됩니다.

const enum Money {
  WON,
  DOLLAR,
}

Money.WON;
// (enum member) Money.WON = 0
Money[Money.WON];
// A const enum member can only be accessed using a string literal.

Money.WON0으로, Money.DOLLAR1로 변환됩니다. 다만 Money라는 자바스크립트 객체가 없으므로 Money[Money.WON]은 불가능합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.