J'ai une fonction pour une composition ZIP en TypeScript qui prend n'importe quel nombre de tableaux en paramètres et devrait renvoyer un nouveau tableau avec un élément de chaque tableau d'entrée. Le problème est le type du tableau retourné.
La fonction devrait avoir le même type de retour que la fonction zip en python ou dans lodash.
function zipComp(...arrs: T[][]) { ... }
zipComp([1, 2], [false, true]) // attendu: [number, boolean][], réel: unknown[]
zipComp(["a", "b", "c"], [1, 2, 3], [{}, {}, {}]) // attendu: [string, number, object][], réel: unknown[]
J'ai regardé les types de lodash pour voir comment ils ont fait.
// à partir de lodash (array.d.ts)
zip(arrays1: List, arrays2: List): Array<[T1, T2]>;
zip(arrays1: List, arrays2: List, arrays3: List): Array<[T1, T2, T3]>;
zip(arrays1: List, arrays2: List, arrays3: List, arrays4: List): Array<[T1, T2, T3, T4]>;
zip(arrays1: List, arrays2: List, arrays3: List, arrays4: List, arrays5: List): Array<[T1, T2, T3, T4, T5]>;
zip(...arrays: Array>): Array>; // => ici est le problème
Cette implémentation fonctionne d'une certaine manière, mais a le même problème s'il y a plus de 5 tableaux d'entrée.
Y a-t-il un moyen d'écrire ce type d'arguments de manière générale, sans avoir de cas pour n'importe quel nombre d'arguments?