Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 261 · 13 de septiembre de 2026 · Media

    Mayúsculas de título

    Implementa TitleCase<S> para que cada palabra separada por espacios en S reciba una mayúscula inicial.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    title-case.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

    3
    • TitleCase<'hello world'>—
      → 'Hello World'
    • TitleCase<'foo'>—
      → 'Foo'
    • TitleCase<'a b c'>—
      → 'A B C'

    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 14 de septiembre de 2026

    La solución

    type TitleCase<S extends string> =
      S extends `${infer W} ${infer Rest}` ? `${Capitalize<W>} ${TitleCase<Rest>}` : Capitalize<S>

    El error más común

    type TitleCase<S extends string> = Capitalize<S>

    Capitalize capitaliza una cadena, en singular — el primer carácter del conjunto y nada más. "hello world" se convierte en "Hello world". El tipo integrado no tiene noción de palabra, así que todo lo que tenga forma de palabra has de encontrarlo tú antes.

    Línea por línea

    1. `${infer W} ${infer Rest}`

      El espacio literal entre los marcadores es lo que convierte esto en un separador de palabras. La inferencia se detiene en el primero que encuentra, así que W es siempre una sola palabra.

    2. : Capitalize<S>

      El caso base es la última palabra, y es el único lugar donde Capitalize se aplica a toda la cadena restante — para entonces, toda la cadena restante *es* una palabra.

    Para recordar

    Los tipos intrínsecos de cadena trabajan sobre cadenas enteras. Las palabras, los segmentos y las rutas son cosas que primero recortas con patrones de plantilla y solo después entregas.

    Usa