我有一个在其字段之一中使用枚举值的接口:
export enum AnimalType {
DOG,
CAT,
}
export interface DogAttrs {
bones: boolean,
type: AnimalType.DOG
}
我的目标是创建狗并将其添加到狗列表的功能。
function addDog(animalList: DogAttrs[]) {
const animal = {
type: AnimalType.DOG,
bones: true
}
animalList.push(animal);
}
但是此函数表示我创建的对象是错误的,并且不符合DogAttrs
接口:
Type 'AnimalType' is not assignable to type '"DOG"'.
那是为什么?以及如何解决这个问题?
实时示例:
答案 0 :(得分:2)
问题在于,当您将打字稿分配给变量时,打字稿会扩大常量的类型。一种简单的解决方案是使用as const
断言或显式指定常量的类型:
function addDog(animalList: DogAttrs[]) {
const animal: DogAttrs = {
type: AnimalType.DOG,
bones: true
}
animalList.push(animal);
}
或
function addDog(animalList: DogAttrs[]) {
const animal = {
type: AnimalType.DOG,
bones: true
} as const
animalList.push(animal);
}