您已经可以定义一个类型化的 zip 函数,它接受固定数量的参数,如下所示:
function zip2<A, B>(a: A[], b: B[]): Array<[A, B]>
Run Code Online (Sandbox Code Playgroud)
我想知道现在是否可以创建一个接受具有通用返回类型的 rest 参数的 zip 函数?
function zip(...args) {
return args[0].map((_, c) => args.map(row => row[c]));
}
Run Code Online (Sandbox Code Playgroud)
据我所知,在 Typescript 3.0 中添加的新通用 rest 参数<T extends any[]>仍然不足以键入以前的函数?
在typescript@next(将作为 TypeScript 3.1 发布)带有映射的元组:
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][]
Run Code Online (Sandbox Code Playgroud)
(不得不取笑巴萨拉。)