网站搜索

TypeScript 数组<>.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>。

答案#1

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

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

//  ^ this is what you need to add