Type Alias MergedTupleOrArray<T>
MergedTupleOrArray<T>: T extends [infer V0] ? [Merged<V0>] : T extends [infer V0, infer V1] ? [Merged<V0>, Merged<V1>] : T extends [infer V0, infer V1, infer V2] ? [Merged<V0>, Merged<V1>, Merged<V2>] : T extends [infer V0, infer V1, infer V2, infer V3] ? [Merged<V0>, Merged<V1>, Merged<V2>, Merged<V3>] : T extends [infer V0, infer V1, infer V2, infer V3, infer V4] ? [Merged<V0>, Merged<V1>, Merged<V2>, Merged<V3>, Merged<V4>] : T extends any[] ? Merged<T[number]>[] : T extends readonly [infer V0] ? readonly [Merged<V0>] : T extends readonly [infer V0, infer V1] ? readonly [Merged<(...
)>, Merged<(...
)>] : T extends readonly [(...
), (...
), (...
)] ? readonly [(...
), (...
), (...
)] : T extends readonly (...
) ? readonly (...
) : (...
) extends (...
) ? (...
) : (...
)
[S0, T0] & [S1, T1]cannot be converted to[S0 & S1, T0 & T1], but we can at least preserve the tuple when not intersected.Intersected tuples become arrays. E.g.
[S0, T0] & [S1, T1]becomesArray<S0 | S1 | T0 | T1>