您已经可以定义接受固定数量参数的类型化 zip 函数,如下所示:
function zip2<A, B>(a: A[], b: B[]): Array<[A, B]>
我想知道现在是否可以创建一个 zip 函数来接受具有通用返回类型的剩余参数?
function zip(...args) {
return args[0].map((_, c) => args.map(row => row[c]));
}
据我所知,Typescript 3.0 中添加的新通用剩余参数
<T extends any[]>
仍然不足以输入以前的函数?
type Zip<T extends unknown[][]> = { [I in keyof T]: T[I] extends (infer U)[] ? U : never }[];
function zip<T extends unknown[][]>(...args: T): Zip<T> {
return <Zip<T>><unknown>(args[0].map((_, c) => args.map(row => row[c])));
}
declare const y: number[], z: string[];
let yz = zip(y, z); // [number, string][]