Saltar al contenido
webtype.org#227 includes-tuple · par 3

N.º 227 · 4 de agosto de 2026 · Media

Incluye

Implementa `Includes<T, U>` para que indique si la tupla `T` contiene exactamente el tipo `U`. `boolean` no cuenta como contener `true` — la coincidencia debe ser exacta. `Equal` del harness está disponible.

01

Intenta el puzle tú mismo

Par 3

Puzle

includes-tuple.ts
Intento 1 de 3Aún sin comprobar

Sustituye ??? — tu solución se comprueba con los casos de abajo. Tab indenta; pulsa Escape y luego Tab para sacar el foco.

Comprobaciones

4
  • Includes<[1, 2, 3], 2>
    true
  • Includes<[1, 2, 3], 4>
    false
  • Includes<[], 1>
    false
  • Includes<[boolean], true>
    false

Cómo se juzga una comprobación Igualdad exacta de tipos, no asignabilidad — una intersección no es lo mismo que el objeto aplanado.

Cómo le fue a todo el mundo

Menos de 5 personas han resuelto este puzle hasta ahora. La distribución aparece cuando la muestra sea lo bastante grande como para significar algo.

Archivo
02

Solución comentada

Publicado el 5 de agosto de 2026

La 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

  1. Equal<H, U> extends true

    `Equal` devuelve el tipo `true` o el tipo `false`, así que hay que probarlo con `extends true` en lugar de usarlo directamente como condición. Este es el puzle donde el propio harness se convierte en herramienta.

  2. : false

    Llegar 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.