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] becomes Array<S0 | S1 | T0 | T1>

Type Parameters

  • T extends readonly any[]