Завдання

Реалізувати типізовану версію Array.unshift(). Наприклад:

type Result = Unshift<[1, 2], 0>; // [0, 1, 2]

Розв’язок

Це завдання має багато спільного з іншим завданням - Push. Там, ми використали варіативні типи, щоб взяти всі елементи з масиву.

В цьому завданні ми робимо те ж саме, але в іншому порядку. Спочатку, давайте візьмемо всі елементи з вхідного масиву:

type Unshift<T, U> = [...T];

З цією частиною коду, ми отримуємо помилку компіляції “A rest element type must be an array type”. Полагодимо її, додавши обмеження на тип параметрі:

type Unshift<T extends unknown[], U> = [...T];

Тепер у нас є елементи вхідного масиву в нашому кортежі. Все, що нам потрібно, це додати новий елемент в початок кортежу:

type Unshift<T extends unknown[], U> = [U, ...T];

Таким чином, ми реалізували функцію unshift() в системі типів TypeScript!

Посилання