type Swap<T> = T extends [infer A, infer B] ? [B, A] : never
type condition = Swap<[string,number]> // [number, string]
// 头尾交换
type SwapHeadTail<T> = T extends [infer H, ...infer N, infer T] ? [T, ...N, H] : never
type condition = SwapHeadTail<[1,2,3,4,5,6,7]> // type condition = [7, 2, 3, 4, 5, 6, 1]
// 元组转换为联合类型
type ElementToUnion<T> = T extends Array<infer E> ? E : never
type TupleToArray = ElementToUnion<[number, string, boolean]> // string | number | boolean
infer 根据位置推导,[number, string, boolean] 都能赋值给 E ,则E 是 number|string|boolean