【问题标题】:Can a typed zip function be implemented now with Typescript 3.0's generic rest parameters?现在可以使用 Typescript 3.0 的通用休息参数来实现类型化的 zip 函数吗?
【发布时间】:2019-01-29 07:49:34
【问题描述】:

您已经可以定义一个接受固定数量参数的类型化 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 &lt;T extends any[]&gt; 中添加的新通用休息参数仍然不足以键入以前的函数?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    在带有映射元组的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][]
    

    ?(不得不取笑巴萨拉特。?)

    【讨论】:

    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多