前置不定参数以及类型关联
// 前置参数类型
type A = 'string' | 'boolean'
// 类型关联MAP
type B = {
'string': string
'boolean': boolean
}
type C<T extends A[]> = {
[I in keyof T]: B[T[I]]
}
declare function demo<T extends A[]>(...args: [
...T,
(...args: C<T>) => any
]): void
demo('string', 'boolean', (a, b) => {}) // a类型: string, b类型: boolean
demo('boolean', 'string', (a, b) => {}) // a类型: boolean, b类型: string