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
