при 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 в одном из кейсов.
Обсуждают сегодня