Unshift
Завдання
Реалізувати типізовану версію 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!
Коментарі