【发布时间】:2021-12-29 15:16:55
【问题描述】:
我正在处理一个复杂的 redux 情况,但无法完全得到我需要的东西。我有 2 个对象,Track 和 Target
interface Track {
id: number,
...other fields
}
interface Target {
id: number (same as the Track)
tracks: Track[]
...other fields
}
我想要做的是,当我获取轨道时,我试图查看是否有任何目标具有相同的 ID(一个目标对多个轨道),如果有,则将轨道添加到该目标的轨道数组,否则 - 创建一个具有该 Track id 的新目标并将该轨道放入轨道数组中
case TargetActionTypes.FETCH_TARGETS_SUCCESS:
return {
...state,
targets: [
action.tracks.map((track: Track) =>
state.targets.map((target: Target) =>
track.target_id === target.id
? {
...target,
tracks: [...target.tracks, track]
}
: {
id: track.target_id,
visible: true,
tracks: [track]
}
)
)
]
}
我认为这是在正确的轨道上,但打字稿在抱怨,因为我认为它的嵌套内容可能由于嵌套循环而太深了一层?这里有打字稿错误
Types of property 'targets' are incompatible. Type '{ tracks: Track[]; id: number; visible: boolean; }[][][]' is not assignable to type 'Target[]'.
Type '{ tracks: Track[]; id: number; visible: boolean; }[][]' is missing the following properties from type 'Target': id, visible, tracks",
【问题讨论】:
-
所以父级设置为Target[]类型,但是映射返回一个嵌套数组,这就是TS抱怨的原因,你能不能用硬编码的响应在普通的香草JS中试试这个,这样我们就知道我们至少得到了什么 o/p,并且我们可以弄清楚
标签: javascript reactjs typescript redux react-redux