TypeScript Array<>.reduce()-typer
Finns det ett sätt inom TypeScript att ändra typen som förväntas returneras av ett Array.reduce-anrop från den typ som ges till det? Koden jag har ett problem med är nedan som ett exempel:
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 utökar typen Array<RelationalReversionQuery>.
Svar #1
Detta är intressant. Den inbyggda typen tillåter dig inte att returnera en annan typ än den ursprungliga typen om du inte anger det andra argumentet i .reduce-funktionen i det här fallet.
this.reduce((accumulator: RelationalReversionQuery|RelationalReversionQuery[][], item: RelationalReversionQuery) => {
// ...
}, []);
// ^ this is what you need to add
