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!
Комментарии