Завдання

Реалізувати тип Pop<T>, який приймає масив T та повертає масив без останнього елемента. Наприклад:

type arr1 = ["a", "b", "c", "d"];
type arr2 = [3, 2, 1];

type re1 = Pop<arr1>; // expected to be ['a', 'b', 'c']
type re2 = Pop<arr2>; // expected to be [3, 2]

Розв’язок

Розділимо масив на дві частини: від початку до останнього елемента й останній елемент. Потім позбуваємось від останнього елемента і повертаємо першу частину.

Для цього скористаємось варіативними типами. Комбінуючи їх з виведенням типів в умовних типах, виводимо потрібні частини массиву:

type Pop<T extends any[]> = T extends [...infer H, infer T] ? H : never;

У випадку, коли T можна присвоїти до масиву, який можна поділити на дві частини, повертаємо його першу частину, інакше повертаємо never.

Посилання