Saltar al contenido
webtype.org#225 trim-string · par 3

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.

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.