如何修复/调试这个特定的(最好是一般的)TypeScript 编译错误?

问题描述 投票:0回答:1

我有这个 TypeScript 代码(它很脏,带有注释,因为我决定留下它们来展示我尝试过的各种方法):

function getPlacesToStopExchange(): {
  our: { i: number; val: number; }[];
  enemy: { i: number; val: number; }[];
  //[party in 'our' | 'enemy' ]: { i: number; val: number; }[];
} {
  return valuesByMoves.reduce((o, v, i) => {
    if (i === 0 || i % 2) {
      //  //we move
      const el: { i: number; val: number; } = { i, val: v, };
      o.enemy.push(el);
    } else {
    //  o.our.push({ i, val: v, } as { i: number; val: number; }));
    }
    return o;
  }, { enemy: [], our: [], });
}

第 10 行:

o.enemy.push(el);
我收到此错误:

error TS2345: Argument of type '{ i: number; val: number; }' is not assignable
to parameter of type 'never'.

134           o.enemy.push(el);

如果我评论该行 - 不存在错误,所以我很确定它确实存在,而不是在函数返回值或reduce初始值的类型声明上。

有人知道如何解决这个问题吗?我在SO上看到过其他问题,实际上我必须在发生错误的地方指定类型,但正如人们所看到的,我已经在很多地方尝试过这一点方法。

我还尝试查看

tsc
代码,但没有调用堆栈,什么也没有。所以我不知道去哪里看。

因此,如果有人提供关于如何调试tsc

错误的一般性建议
,我将非常感激。

谢谢你。

javascript typescript debugging compiler-errors tsc
1个回答
0
投票

这很有帮助,即指定reduce回调的初始值:

function getPlacesToStopExchange(): {
  our: { i: number; val: number; }[];
  enemy: { i: number; val: number; }[];
  //[party in 'our' | 'enemy' ]: { i: number; val: number; }[];
} {
  return valuesByMoves.reduce((o, v, i) => {
    if (i === 0 || i % 2) {
      //  //we move
      const el: { i: number; val: number; } = { i, val: v, };
      o.enemy.push(el);
    } else {
    //  o.our.push({ i, val: v, } as { i: number; val: number; }));
    }
    return o;
  }, { enemy: [], our: [], } as {
    our: { i: number; val: number; }[];
    enemy: { i: number; val: number; }[];
    //[party in 'our' | 'enemy' ]: { i: number; val: number; }[];
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.