首页 > 解决方案 > TypeScript Array<>.reduce() 类型

问题描述

TypeScript 中有没有办法将Array.reduce调用返回的类型从给定的类型更改?为了举例,我遇到问题的代码如下:

let executionSequence: RelationalReversionQuery[][] = this.reduce(
    (accumulator: RelationalReversionQuery|RelationalReversionQuery[][], item: RelationalReversionQuery) => {
    if (accumulator instanceof RelationalReversionQuery) {
        if ((accumulator.ExecutionSequence === RelationalReversionQueryExecutionSequence.Indifferent) && (item.ExecutionSequence === RelationalReversionQueryExecutionSequence.Indifferent)) {
            return [[accumulator, item]]
        }
        return [[accumulator], [item]];
    }
    if (item.ExecutionSequence !== RelationalReversionQueryExecutionSequence.Indifferent) {
        accumulator.push([item]);
        return accumulator;
    }
    if (accumulator.length > 0) {
        let lastArray = accumulator[accumulator.length - 1];
        if (lastArray.length > 0) {
            if (lastArray[lastArray.length - 1].ExecutionSequence === RelationalReversionQueryExecutionSequence.Indifferent) {
                lastArray.push(item);
            } else {
                accumulator.push([item]);
            }
        } else {
            lastArray.push(item);
        }
    } else {
        accumulator.push([item]);
    }
    return accumulator;
});

this正在扩展类型Array<RelationalReversionQuery>

标签: typescripttypescript-typingstypescript-generics

解决方案


这是有趣的。内置类型不允许您返回原始类型的不同类型,除非您.reduce在这种情况下指定函数的第二个参数。

this.reduce((accumulator: RelationalReversionQuery|RelationalReversionQuery[][], item: RelationalReversionQuery) => {
  // ...
}, []);

//  ^ this is what you need to add

推荐阅读