【问题标题】:Type {}[] not assignable to {}[]类型 {}[] 不可分配给 {}[]
【发布时间】: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 需要flowItemFlowItem 类型
  • @NadiaCibrikova 哦,天哪!你是对的,我错过了这部分。您想回答问题,以便我将其标记为正确吗?
  • TypeScript 方面:CapacityItemFlowItem 是什么? data.productsCapacity 到底是什么?这个 sn-p 的一般问题是您没有充分输入代码,除了函数参数。最后的评论 // &lt;- it's an Array - 是罪魁祸首 - 不仅是错误的(capacitiesWithData 实际上是 any 类型),而且它还显示了您和 TypeScript 的思维分歧的地方。从输入数据和函数返回类型开始,使用 IDE 进行检查并找出代码中的问题。 JavaScript 方面:validCapacities.map 的结果被忽略。
  • @vbotio 很高兴它有帮助!添加了答案。

标签: javascript typescript types typescript-typings


【解决方案1】:

flowItem: string; title: string; count: number; 不能分配给 DonutChartData,因为类型不匹配 - flowItem: string vs flowItem: FlowItem;

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 2019-06-02
    • 2018-01-04
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    相关资源
    最近更新 更多