代码之家  ›  专栏  ›  技术社区  ›  ThaFog

带keyof-like方法的类型脚本数组类型转换

  •  4
  • ThaFog  · 技术社区  · 6 年前

    我正在尝试实现类似于一个数组类型的克隆,其中指定的值类型是数组,函数返回指定的值。

    假设我们有数组元组,比如:

    [string, number]
    

    我想从中得到生成的类型,比如:

    [() => string, () => number]
    

    我试过用类型别名 keyof 用途:

    type tupleTransform<T extends Array<any>> = { [U in keyof T ]: (() => T[U]) };
    

    除了检查 Array 所以如果我能做到:

    const tupleTransformer: tupleTransform<[string, number]> = [() => 'a', () => 5]
    

    如果某个方法返回的类型不正确,将引发错误。

    1 回复  |  直到 6 年前
        1
  •  5
  •   jcalz    6 年前

    type TupleTransform<T extends any[]> = { [K in keyof T]:
        K extends "length" ? T[K] :
        K extends keyof any[] ? Array<() => T[number]>[K] :
        () => T[K] 
    }
    

    conditional types

    const tupleTransformer: TupleTransform<[string, number]> = [() => 'a', () => 5] //okay
    const t0: () => string = tupleTransformer[0]
    const t1: () => number = tupleTransformer[1]
    const len: 2 = tupleTransformer.length;
    const mapped: (string | number)[] = tupleTransformer.map(x => x()); 
    

    推荐文章