Выбор ответа 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.
Варианты ответа
booleannevertrueправильный ответfalse
Разбор
T[number] для [number] это number, а литерал 1 совместим с number. Проверка U extends T[number] даёт true, хотя элемента, в точности равного 1, в кортеже нет. Наивный Includes проверяет совместимость, а не равенство.
Корректная версия идёт по кортежу рекурсией и сравнивает каждый элемент через Equal. boolean получился бы при распределении по объединению в U, а здесь U один литерал.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.