Solución comentada
Publicado el 5 de agosto de 2026La solución
type Includes<T extends readonly unknown[], U> = T extends readonly [infer H, ...infer R] ? Equal<H, U> extends true ? true : Includes<R, U> : false
El error más común
type Includes<T extends readonly unknown[], U> = U extends T[number] ? true : false
Corto y equivocado. T[number] es la unión de tipos de elemento y extends pregunta por asignabilidad, así que Includes<[boolean], true> responde true — true es asignable a boolean aunque la tupla no contenga tal elemento. Asignabilidad no es pertenencia.
Línea por línea
Equal<H, U> extends trueEqualdevuelve el tipotrueo el tipofalse, así que hay que probarlo conextends trueen lugar de usarlo directamente como condición. Este es el puzle donde el propio harness se convierte en herramienta.: falseLlegar a la tupla vacía significa que se comprobaron todos los elementos y ninguno coincidió. Agotar la lista *es* la respuesta negativa.
Para recordar
Cuando un puzle dice «exactamente», extends es la herramienta equivocada — comprueba asignabilidad, que es unidireccional. La identidad exacta necesita Equal, y por eso toda comprobación de este sitio se apoya en él.

