用数字枚举进行力值验证

时间:2019-09-27 15:08:48

标签: javascript typescript

我不会为此收到警告:

enum Animals {
    CAT = 1, DOG, SNAKE
}


interface AnimalsTest {
    animalKind: Animals.CAT | Animals.DOG | Animals.SNAKE
}

let myAnimal: AnimalsTest = {animalKind: 4};

我希望通过这种逻辑来限制属性编号,但是它不起作用。 我可以更改它并为此使用枚举吗?

1 个答案:

答案 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