Завдання

Реалізувати 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];

Посилання