Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 262 · 14 de septiembre de 2026 · Suave

    Fuera los nulos

    Implementa Defined<T> para que elimine null y undefined de una unión, dejando todo lo demás en su sitio.

    01

    Intenta el puzle tú mismo

    Par 2

    Puzle

    non-nullable.ts
    Intento 1 de 2Aú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

    3
    • Defined<string | null>—
      → string
    • Defined<number | undefined | null>—
      → number
    • Defined<null>—
      → never

    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.

    Juego corto

    Menos caracteres

    Aún no hay marcas públicas.

    Archivo
    02

    Solución comentada

    Publicado el 15 de septiembre de 2026

    La solución

    type Defined<T> = T extends null | undefined ? never : T

    El error más común

    type Defined<T> = [T] extends [null | undefined] ? never : T

    El envoltorio de tupla desactiva la distribución, y la distribución es justo lo que este puzle necesita. string | null se comprueba ahora como un todo: no es asignable a null | undefined, así que el condicional toma la rama falsa y devuelve la unión tal cual, con null dentro.

    Línea por línea

    1. T extends null | undefined ? never : T

      Como T está desnudo, esto se ejecuta una vez por miembro. string sobrevive, null se convierte en never, y los resultados se vuelven a unir.

    2. never

      Convertir un miembro en never es la forma de borrarlo: string | never se simplifica a string sin que nadie tenga que filtrar nada.

    Para recordar

    La distribución es una característica, no un accidente. Recurre al envoltorio [T] solo cuando quieras preguntar por una unión como un todo — y nunca cuando quieras editar sus miembros.

    Usa