【发布时间】:2021-08-08 22:26:12
【问题描述】:
我有这些:
export type DataItemChild = {
id: number;
title:string;
checked?: boolean;
};
请注意,此处的子项可以未定义:
export type DataItems = {
id: number;
title:string;
subItems?: Array<DataItemChild>;
checked?: boolean;
};
export const initalState: StateType = {
items: [],
date: new Date(),
};
到目前为止,我已经弄清楚如何更新顶级对象上的数组,例如:
case ActionKind.Checked:
newArrayChecked = state.items.map((item) => ({
...item,
checked: item.id === payload.id ? true : item.checked,
}));
return {
...state,
items: newArrayChecked,
};
我不知道如何更新子项?我有这个(精简)
export const reducer = (state: StateType, action: Action) => {
const { type, payload } = action;
let newArrayChildCheck: Array<DataItemChild> = []
switch (type) {
case ActionKind.UnCheckedSub:
newArrayChildCheck = state.items.map((item) => ({
...item.subItems?.map((sub, index) => ({
checked: sub.id === payload.subItems?[index].id ? true: sub.checked
})),
}));
return {
...state,
items.subItems: newArrayChildCheck,
};
default:
return state;
}
};
但这给了我一个打字错误,说我的 newArrayChildCheck 不支持未定义。完全错误:
类型 '{ [x: number]: { 选中: boolean |不明确的; };长度?: 号码 |不明确的; toString?: (() => 字符串) |不明确的; toLocaleString?: (() => 字符串) |不明确的;流行?:(()=> {检查: 布尔值 |不明确的; } |未定义)|不明确的; ... 29 更多 ...; [Symbol.unscopables]?: (() => { ...; }) |不明确的; }[]' 不是 可分配给类型“DataItemChild[]”。键入'{ [x:数字]:{ 检查:布尔值 |不明确的; };长度?:数字 |不明确的; toString?: (() => 字符串) |不明确的; toLocaleString?: (() => 字符串) |不明确的;流行?:(()=
编辑:
@Kelvin Schoofs 回答后,我意识到我正在发送一个包含子项的整个对象。有效载荷的类型为DataItems
我根据@Kelvin Schoofs 的建议稍微修改了我的尝试:
newArrayChildCheck = state.items.map((item) => ({
...item,
subItems: item.subItems?.map((sub, index) => ({
...sub,
checked: sub.id === payload.subItems[index].id ? true : sub.checked
})),
不是[index]
但我得到了
对象可能未定义
【问题讨论】:
标签: javascript reactjs typescript