打字稿重映射数组类型

时间:2019-12-17 20:16:23

标签: typescript typescript-typings

是否可以重新映射数组类型(或元组?)

比方说,我有一个函数数组,我想用它作为函数数组的参数。像

type Remap<F extends ((... args: any) => any)[]> =
    F extends [infer T1] ? [Parameters<T1>] :
    F extends [infer T1, infer T2] ? [Parameters<T1>, Parameters<T2>] :
    F extends [infer T1, infer T2, infer T3] ? [Parameters<T1>, Parameters<T2>,  Parameters<T3>] :
    never;

const a = [(a: string) => void, (b: number) => void]
type T = Remap<typeof a> // [[string], [number]] - simply captured arguments of functions.

我需要传递诸如“ a”之类的函数数组,并创建可能包含新函数的新函数,该函数将包含所有函数的参数([第一个参数],[第二个参数])。

1 个答案:

答案 0 :(得分:1)

您可以使用映射类型来映射元组:

type Remap<F extends ((...args: any) => any)[]> = {
  [P in keyof F]: F[P] extends (...a: infer P) => any ? P: never
}

declare const a: [(a: string) => void, (b: number) => void]
type T = Remap<typeof a>

Playground Link