Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 225 · 2 de agosto de 2026 · Media

    Recorta

    Implementa Trim<S> para que elimine espacios en blanco de ambos extremos de un tipo cadena. Whitespace está disponible y cubre espacios, tabulaciones y saltos de línea.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    trim-string.ts
    type Whitespace = ' ' | '\n' | '\t'
    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
    • Trim<' hello '>—
      → 'hello'
    • Trim<'nospace'>—
      → 'nospace'
    • Trim<'\ttabbed\t'>—
      → 'tabbed'
    • Trim<' '>—
      → ''

    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 3 de agosto de 2026

    La solución

    type Trim<S extends string> = S extends `${Whitespace}${infer R}`
      ? Trim<R>
      : S extends `${infer R}${Whitespace}`
        ? Trim<R>
        : S

    El error más común

    type Trim<S extends string> = S extends `${Whitespace}${infer R}${Whitespace}`
      ? Trim<R>
      : S

    Exigir espacios en ambos extremos en un solo patrón falla en cuanto solo uno los tiene: " left" no encaja, así que no se recorta nada. Los dos extremos deben tratarse por separado.

    Línea por línea

    1. `${Whitespace}${infer R}`

      Whitespace es una unión, así que este patrón son en realidad tres patrones a la vez — un literal de plantilla encaja si cualquier miembro de la unión cabe en la ranura.

    2. Trim<R>

      Cada pasada quita un carácter y el resultado se realimenta. Ambas ramas recurren al mismo tipo, así que el mismo bucle consume los espacios iniciales y finales.

    Para recordar

    Una unión dentro de un patrón de literal de plantilla multiplica los patrones que se prueban. Las ramas condicionales ordenadas te dejan luego pelar un extremo cada vez sin escribir dos tipos separados.

    Usa