是否可以重新映射数组类型(或元组?)
比方说,我有一个函数数组,我想用它作为函数数组的参数。像
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”之类的函数数组,并创建可能包含新函数的新函数,该函数将包含所有函数的参数([第一个参数],[第二个参数])。
答案 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>