Вариативные типы кортежей

Изменения в новых версиях / TypeScript 4.0

// *** before: ***
// a tuple could not be joined with another set of elements by a type spread
function concat(arr1: any[], arr2: any[]): any[] {
    return [...arr1, ...arr2];
}

// *** in version 4.0: ***
type Concat<T extends unknown[], U extends unknown[]> = [...T, ...U];
function concatTyped<T extends unknown[], U extends unknown[]>(arr1: [...T],
                          arr2: [...U]): Concat<T, U> {
    return [...arr1, ...arr2];
}
const result = concatTyped([1, 2] as const, ["a", "b"] as const);
// result: [1, 2, "a", "b"]