我有一个类型错误,我不明白
这是国家的类型
export type Foo = {
animals: {
dogs?: Dogs[],
cats?: Cats[],
fishs?: Fishs[]
},
animalQueue: (Dogs | Cats | Fishs)[]
}
现在,在一个减速器里,
...
someFunction: (state, action: PayloadAction<{ index: number, animalKey: keyof Required<Foo>['animals']}> => {
const {index, animalKey} = action.payload
const animal = state.animalQueue[index]
state.animals[animalKey]!.push(animal)
}
...
这给了我一个错误
TS 2345:类型为“”的参数|可调吃水|不能为类型“狗、猫和鱼”的参数赋值<...>。类型'可分配草稿'不能分配给类型'狗&猫&鱼'。类型“CatableDraft”中缺少属性“height”,但类型“Cats”中需要该属性。
我猜是因为这个
(Dogs | Cats | Fishs)[]
所以我在这里尝试定义的是一个可以包含Dogs
和/或Cats
和/或Fishs
的Array。所以基本上所有的东西都是“混合”的。
2条答案
按热度按时间xggvc2p61#
你不知道的错误是由于Type脚本的类型检查以及它如何与你为Foo状态找到的类型相关联。这是rеlatеd的事实,类型脚本是试图确保类型匹配正确的时候,你推到动物数组的基础上动物。
此错误模式表示Typescript正在扩展某些属性(如Cats的“hight”),而这些属性在您正在使用的Draft类型中没有出现。
以下是更新后的reducer函数:
i86rm4rw2#
需要进行严格的类型检查
其中
isDogType()
、isCatType()
和isFishType()
是type guards