【问题标题】:TypeScript Array<>.reduce() TypesTypeScript Array<>.reduce() 类型
【发布时间】:2021-11-25 10:15:41
【问题描述】:

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&lt;RelationalReversionQuery&gt; 类型。

【问题讨论】:

  • 到底是什么问题?您期望会发生什么以及会发生什么?
  • @VLAZ 代码方面,它在 JavaScript 中没有类型问题,但在 TypeScript 中我在 WebStorm 中遇到类型错误。我期望接收Array&lt;RelationalReversionQuery&gt; 并输出Array&lt;Array&lt;RelationalReversionQuery&gt;&gt; - 也就是说,累加器内发生类型更改。

标签: typescript typescript-typings typescript-generics


【解决方案1】:

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

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

//  ^ this is what you need to add

【讨论】:

    猜你喜欢
    • 2015-12-10
    • 2020-07-29
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2017-04-03
    相关资源
    最近更新 更多