【发布时间】:2021-10-29 11:05:28
【问题描述】:
我对 TypeScript 有点陌生,我有点难以理解这里发生了什么。 错误是
类型'({ flowItem: string; title: string; count: number; } | { flowItem: string; title: string; count: number; } | { flowItem: string; title: string; count: number; } | { flowItem: string; title: string; count: number; })[]' 不可分配给类型 'DonutChartData[]'。
我的 DonutChartData 界面如下所示:
export interface DonutChartData {
flowItem: FlowItem;
title: string;
count: number;
}
我正在运行一个函数来做这样的事情:
const testnewGroups: DonutChartData[] = newGroups(data.productsCapacity, flowItem);
这个newGroups 函数执行一些条件并将值分配给一个对象,并在函数结束时将该对象转换为一个数组。
const newGroups = (validCapacities: CapacityItem[], flowItem: string) => {
const datesBreakpoint = {
month: 30,
trimester: 90,
semester: 180,
};
const groups = {
lessThanOneMonth: {
flowItem,
title: 'Less than 1 month',
count: 0,
},
oneToThreeMonths: {
flowItem,
title: '1 - 3 months',
count: 0,
},
threeToSixMonths: {
flowItem,
title: '3 - 6 months',
count: 0,
},
sixPlus: {
flowItem,
title: '6+ months',
count: 0,
},
}
validCapacities.map((capacity) => {
if (capacity.daysToWorkOffWIP < datesBreakpoint.month) {
if (capacity.daysToWorkOffWIP < 0 || capacity.neglectedWIP) {
groups.lessThanOneMonth.flowItem = FlowItem.uncategorized;
}
return groups.lessThanOneMonth.count++;
} else {
if (capacity.daysToWorkOffWIP >= datesBreakpoint.month) {
if (capacity.daysToWorkOffWIP < datesBreakpoint.trimester) {
return groups.oneToThreeMonths.count++;
} else if (capacity.daysToWorkOffWIP < datesBreakpoint.semester){
return groups.threeToSixMonths.count++;
} else {
return groups.sixPlus.count++;
}
}
return groups.lessThanOneMonth.count++;
}
})
const capacitiesWithData = Object.values(groups).filter(({ count }) => count > 0);
console.log({ capacitiesWithData }); <- it's an Array
return capacitiesWithData;
}
所以,我不确定我在这里做错了什么,因为它说它不能分配给 DonutChartData 类型。我怎样才能让它发挥作用?
【问题讨论】:
-
问题是变量
testnewGroups期望函数返回DonutChartData[]类型的值,但是,您返回的数组类型不是DonutChartData[]。 -
newGroups获取flowItem作为字符串并将其作为字符串返回,而DonutChartData需要flowItem为FlowItem类型 -
@NadiaCibrikova 哦,天哪!你是对的,我错过了这部分。您想回答问题,以便我将其标记为正确吗?
-
TypeScript 方面:
CapacityItem或FlowItem是什么?data.productsCapacity到底是什么?这个 sn-p 的一般问题是您没有充分输入代码,除了函数参数。最后的评论// <- it's an Array- 是罪魁祸首 - 不仅是错误的(capacitiesWithData实际上是 any 类型),而且它还显示了您和 TypeScript 的思维分歧的地方。从输入数据和函数返回类型开始,使用 IDE 进行检查并找出代码中的问题。 JavaScript 方面:validCapacities.map的结果被忽略。 -
@vbotio 很高兴它有帮助!添加了答案。
标签: javascript typescript types typescript-typings