Last of Array
Проблема
Реализовать тип Last<T>
который принимает массив T
и возвращает тип его
последнего элемента. Например:
type arr1 = ["a", "b", "c"];
type arr2 = [3, 2, 1];
type tail1 = Last<arr1>; // expected to be 'c'
type tail2 = Last<arr2>; // expected to be 1
Решение
Когда нужно получить последний элемент из кортежа, можно перебрать все элементы кроме последнего. Для этой задачи подходят вариативные типы.
Зная о вариативных типах, решение очевидное. Берём элементы от начала кортежа до тех пор, пока не дойдём до последнего элемента. Совмещая это с выведением типов в условных типах, решение становится банально простым.
type Last<T extends any[]> = T extends [...infer X, infer L] ? L : never;
Комментарии