при Includes<[boolean], false> тип возвращает boolean
type Includes<T extends readonly any[], U> =
T extends [infer Head, ...infer Rest]
? Head extends U
? true
: Includes<Rest, U>
: false;
Вроде бы ничего не может вернуться кроме true | false
там нету
Вместо Head extends U вот так Equal<Head, U> extends true.
У тебя получается там boolean по той причине, что первым элементом массива берется boolean, который при дистрибутивности распадается на true | false, каждый из которых в такой проверке Head extends false дает при true - false, при false - true, итоговый результат true | false, который собирается в boolean.
Ну или просто [Head] extends [U] чтоб оффнуть дистрибутивность
Нет, это только описание того, почему вылазит boolean в одном из кейсов.
Обсуждают сегодня