Проблема

Реализовать TupleToUnion<T> который переводит элементы кортежа в их объединение. Например:

type Arr = ["1", "2", "3"];
const a: TupleToUnion<Arr>; // expected to be '1' | '2' | '3'

Решение

Нам нужно взять все элементы из массива и конвертировать их в объединение элементов. К счастью, TypeScript это умеет делать на уровне системы типов - типы поиска.

Используя конструкцию T[number] мы получим объединение всех элементов кортежа T:

type TupleToUnion<T> = T[number];

Но, это решение не компилируется по причине “Type ‘number’ cannot be used to index type ‘T’“. Потому что, нету ограничений на T, которые укажут на принадлежность T к массиву, типу, который можно проиндексировать. Починим это, добавив ограничение:

type TupleToUnion<T extends unknown[]> = T[number];

Что почитать