Tuple to Union
Завдання
Реалізувати 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];
Коментарі