다음은 TypeScript에서 컴파일되는 이유는 무엇입니까?TypeScript : 열거 형 캐스트에 대한 암시 적 번호
enum xEnum {
X1,X2
}
function test(x: xEnum) {
}
test(6);
오류가 발생하지 않아야합니까? IMHO이 암시 적 캐스트는 여기에 잘못되었습니다, 안 그래요?
여기는 playground link입니다.
다음은 TypeScript에서 컴파일되는 이유는 무엇입니까?TypeScript : 열거 형 캐스트에 대한 암시 적 번호
enum xEnum {
X1,X2
}
function test(x: xEnum) {
}
test(6);
오류가 발생하지 않아야합니까? IMHO이 암시 적 캐스트는 여기에 잘못되었습니다, 안 그래요?
여기는 playground link입니다.
이것은 언어 사양의 일부입니다 (3.2.7 열거 유형) :
그래서 결정은열거 유형이 번호 원시 형에 할당 할 수 있습니다, 그리고 그 반대하지만, 다른 열거 유형이 서로 할당 할 수 없습니다
number
및
Enum
반대의 경우도 마찬가지 사이의 의도적 인 암시 적 변환을 허용합니다.
즉, 값이 유효한지 확인해야합니다. - 당신이 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);
}
당신이 구현에 동의하지 않을 수도 있지만
, 그것은 열거는이 세 가지 상황에서 유용 것을 주목할 필요가있다 유형을 선택하는 데 사용할 수있는 유형입니다.아니요. 여기서 타입 캐스팅은 없으며, 그 뒤에있는 기본 타입은 모두 정수입니다.
typescript enum type checking works fine
귀하의 불만이 경우, 유형 검사와는 아무 상관이없는, 범위 값에 관한 것입니다.
enum is a flexible set of constants
enum xEnum {X1=6, X2} // ruins it for test(0)
"파멸"이란 무엇입니까? 코드가 완벽하게 작동하며 오류가 발생하지 않습니다. – Narretz
좋아, 그 지적에 대한 들으. 이것은 현명한 결정입니까? 내 말은,이 경우 enum 유형은 전혀 사용하지 않는다는 것입니다. – duedl0r
웹 서버에서 작동하고 그 숫자 만 사용하는 것이 현명합니다. – basarat
열거 형보다 숫자가 세 가지 경우를 추가했습니다. 귀하의 케이스를 커버하지 못한다면 (그리고 언어 사양이 변경되어 암묵적인 '숫자'->'열거 형 변환 '을 제거 할 수 있다면) 여전히 사용하는 몇 가지 유용한 이유가 있습니다. 그들은 "나쁘지 않아"단지 "당신이 원하는만큼 완벽하지는 않습니다."라고 말합니다. – Fenton