Это намеренное решение проекта со стороны команды TypeScript, чтобы включить битовые флаги, см. эту проблему для получения дополнительной информации.Читая эту проблему и различные, на которые она ссылается, я чувствую, что они хотят, чтобы они изначально разделяли перечисления и битовые флаги, но не могут добраться до места внесения критических изменений / добавления флага.
Работает так, как вам нужно, с строкой enum
вместо числовой:
enum AnimalType {
Cat = "Cat",
Dog = "Dog",
Lion = "Lion"
}
// Example 1
function doSomethingWithAnimal(animal: AnimalType) {
switch (animal) {
case AnimalType.Cat: // Works
case AnimalType.Dog: // Works
case "99": // Error: Type '"99"' is not assignable to type 'AnimalType'.
}
}
// Example 2
const someAnimal: { animalType: AnimalType } = {
animalType: AnimalType.Dog
};
let str: string = "foo";
someAnimal.animalType = AnimalType.Cat; // Works
someAnimal.animalType = "1"; // Type '"1"' is not assignable to type 'AnimalType'.
someAnimal.animalType = str; // Error: Type 'string' is not assignable to type 'AnimalType'.
Live Example на игровой площадке