我不会为此收到警告:
enum Animals {
CAT = 1, DOG, SNAKE
}
interface AnimalsTest {
animalKind: Animals.CAT | Animals.DOG | Animals.SNAKE
}
let myAnimal: AnimalsTest = {animalKind: 4};
我希望通过这种逻辑来限制属性编号,但是它不起作用。 我可以更改它并为此使用枚举吗?
答案 0 :(得分:1)
number
可分配给枚举(请参见https://github.com/microsoft/TypeScript/issues/26362),无法从枚举值创建类型。如果需要此功能,则最好使用带有const assertion的对象:
const Animals = <const>{
CAT: 1,
DOG: 2
}
type Values<T> = T[keyof T]
interface AnimalsTest {
animalKind: Values<typeof Animals>
}
let a: AnimalsTest = {animalKind: Animals.DOG}; // ok
let b: AnimalsTest = {animalKind: 2}; // ok too
let c: AnimalsTest = {animalKind: 42}; // not ok