javascript - Typescript variadisk generisk motsvarighet för returvärde


Jag har en funktion som accepterar generiska typargument och returnerar en tuppel av arrayer av samma typer, men denna funktion kan acceptera ett dynamiskt antal av dessa generiska typer. Något i stil med:

function myFunction<T1>(): [Array<T1>] {...}
function myFunction<T1, T2>(): [Array<T1>, Array<T2>] {...}
function myFunction<T1, T2, T3>(): [Array<T1>, Array<T2>, Array<T3>] {...}

och så vidare.

Hur definierar jag en enda generisk typ T och motsvarande returvärde så att jag kan skicka så många olika generiska som jag vill?

Jag har försökt göra det på ett enkelt sätt som:

function myFunction<T extends any[]>(): Array<Array<T[number]>> {...}

Men det förlorar information om vilken typ som lagras på vilken index.

Jag försökte också något liknande detta:

function myFunction<T extends any[]>(): {[key in keyof T]: Array<T[key]>} {...}

Att kalla keyof T på en Array returnerar dock andra egenskaper utöver index som "length" osv., vilket också gör det lite problematiskt vid tilldelning. Resulterar i fel liknande detta:

TS2322: Type 'string[][]' is not assignable to type '{ [x: number]: string[]; length: string[]; toString: string[]; toLocaleString: string[]; pop: string[]; push: string[]; concat: string[]; join: string[]; reverse: string[]; shift: string[]; slice: string[]; sort: string[]; splice: string[]; ... 25 more ...; at: string[]; }'.