我有这个 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
错误的一般性建议,我将非常感激。
谢谢你。
这很有帮助,即指定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; }[];
});
}