TypeScript: неявное число для перечисления
Почему следующий код компилируется в TypeScript?
enum xEnum {
X1,X2
}
function test(x: xEnum) {
}
test(6);
Разве это не должно выдать ошибку? ИМХО, это неявное приведение здесь неверно, нет?
Вот ссылка на игровую площадку.
2 ответа
Это является частью спецификации языка (3.2.7 Enum Types):
Типы перечислений присваиваются типу примитивов Number и наоборот, но разные типы перечислений не могут назначаться друг другу
Таким образом, решение разрешить неявное преобразование между number
а также Enum
и наоборот умышленно.
Это означает, что вам нужно убедиться, что значение действительно.
function test(x: xEnum) {
if (typeof xEnum[x] === 'undefined') {
alert('Bad enum');
}
console.log(x);
}
Хотя вы можете не согласиться с реализацией, стоит отметить, что перечисления полезны в следующих трех ситуациях:
// 1. Enums are useful here:
test(xEnum.X2);
// 2. ...and here
test(yEnum.X2);
И 3. - когда вы печатаете test(
он скажет вам тип перечисления, который вы можете использовать, чтобы гарантировать, что вы выберете тот, который существует.
Нет, не должно. Здесь нет приведения типов, базовый тип за ними одинаков, целое число.
машинописная проверка типов перечислений работает нормально
Ваша жалоба касается значения диапазона, которое в данном случае не имеет ничего общего с проверкой типа.
enum - это гибкий набор констант
enum xEnum {X1=6, X2} // ruins it for test(0)