2014-09-10 6 views

답변

8

이것은 언어 사양의 일부입니다 (3.2.7 열거 유형) :

열거 유형이 번호 원시 형에 할당 할 수 있습니다, 그리고 그 반대하지만, 다른 열거 유형이 서로 할당 할 수 없습니다

그래서 결정은 numberEnum 반대의 경우도 마찬가지 사이의 의도적 인 암시 적 변환을 허용합니다.

즉, 값이 유효한지 확인해야합니다. - 당신이 test(를 입력 할 때 그것은 당신에게 열거를 말할 것이다

// 1. Enums are useful here: 
test(xEnum.X2); 

// 2. ...and here 
test(yEnum.X2); 

그리고 3 :

function test(x: xEnum) { 
    if (typeof xEnum[x] === 'undefined') { 
     alert('Bad enum'); 
    } 
    console.log(x); 
} 

당신이 구현에 동의하지 않을 수도 있지만

, 그것은 열거는이 세 가지 상황에서 유용 것을 주목할 필요가있다 유형을 선택하는 데 사용할 수있는 유형입니다.

+0

좋아, 그 지적에 대한 들으. 이것은 현명한 결정입니까? 내 말은,이 경우 enum 유형은 전혀 사용하지 않는다는 것입니다. – duedl0r

+1

웹 서버에서 작동하고 그 숫자 만 사용하는 것이 현명합니다. – basarat

+0

열거 형보다 숫자가 세 가지 경우를 추가했습니다. 귀하의 케이스를 커버하지 못한다면 (그리고 언어 사양이 변경되어 암묵적인 '숫자'->'열거 형 변환 '을 제거 할 수 있다면) 여전히 사용하는 몇 가지 유용한 이유가 있습니다. 그들은 "나쁘지 않아"단지 "당신이 원하는만큼 완벽하지는 않습니다."라고 말합니다. – Fenton

1

아니요. 여기서 타입 캐스팅은 없으며, 그 뒤에있는 기본 타입은 모두 정수입니다.

typescript enum type checking works fine

귀하의 불만이 경우, 유형 검사와는 아무 상관이없는, 범위 값에 관한 것입니다.

enum is a flexible set of constants

enum xEnum {X1=6, X2} // ruins it for test(0) 
+0

"파멸"이란 무엇입니까? 코드가 완벽하게 작동하며 오류가 발생하지 않습니다. – Narretz