Выбор ответа Senior Задачи на типы обновлено

Ловушка в Includes

Вопрос

Какой тип у R?

type Includes<T extends unknown[], U> = U extends T[number] ? true : false;
type R = Includes<[number], 1>;

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: true. T[number] для [number] это number, а литерал 1 совместим с number.

Варианты ответа

  1. boolean
  2. never
  3. trueправильный ответ
  4. false

Разбор

T[number] для [number] это number, а литерал 1 совместим с number. Проверка U extends T[number] даёт true, хотя элемента, в точности равного 1, в кортеже нет. Наивный Includes проверяет совместимость, а не равенство.

Корректная версия идёт по кортежу рекурсией и сравнивает каждый элемент через Equal. boolean получился бы при распределении по объединению в U, а здесь U один литерал.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.