Серия «Typescript» — Первый и последний тип массива

Я хотел бы начать с того, что делаю эту серию статей, чтобы лучше изучить и понять Typescript, поэтому не стесняйтесь поправлять меня или обращаться ко мне.

Есть много способов получить первый или последний элемент массива, давайте рассмотрим некоторые из них:

const arr = [1, 2, 3, 4, 5];

const first = arr[0];
const last = arr[arr.length - 1]

// or

const [first, ...rest] = arr;
const [...rest, last] = arr;

Войти в полноэкранный режим Выход из полноэкранного режима

Для создания наших типов мы будем использовать подход деструктуризации массива

Типы

type First<Type extends unknown[]> = Type extends [infer R, ...unknown[]] ? R : never

type Last<Type extends unknown[]> = Type extends [...unknown[], infer R] ? R : never
Вход в полноэкранный режим Выход из полноэкранного режима

Для обоих наших желаемых типов мы следуем одному и тому же принципу, поэтому давайте разберем их по отдельности.

Понимание ключевого слова infer

Ключевое слово infer можно использовать в условии в условном типе, чтобы поместить вычисленный тип в переменную. Эта переменная может затем использоваться в ветвях условного типа.

First<Type extends unknown[]> по сути, Type расширяет массив неизвестного типа, нам не важен тип, мы просто хотим получить первый/последний элемент.

Type extends [infer R, ...unknown[]] ? R : never Далее мы проверяем, расширяет ли Type массив с более чем одним элементом, при этом мы выводим тип из первого/последнего разрушаемого элемента, а также получаем остальные. Затем, если проверка пройдена, мы возвращаем первый/последний элемент, иначе возвращаем never (игнорируется TS).

Спасибо!

Вы можете найти меня здесь Мой Твиттер

Оцените статью
devanswers.ru
Добавить комментарий