首页 > 解决方案 > 打字稿重新映射数组类型

问题描述

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

假设我有一个函数数组,并且我想用它捕获参数的函数数组。就像是。

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”之类的函数数组并创建可能包含来自所有函数的参数的新函数,例如([第一个参数],[第二个参数])。

标签: typescripttypescript-typings

解决方案


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

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>

游乐场链接


推荐阅读