Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 231 · 8 de agosto de 2026 · Difícil

    CamelCase

    Implementa CamelCase<S> para que convierta un tipo cadena snake_case a camelCase. Una cadena sin guion bajo se devuelve sin cambios.

    01

    Intenta el puzle tú mismo

    Par 4

    Puzle

    camel-case.ts
    Intento 1 de 4Aú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
    • CamelCase<'foo_bar'>—
      → 'fooBar'
    • CamelCase<'foo_bar_baz'>—
      → 'fooBarBaz'
    • CamelCase<'single'>—
      → 'single'
    • CamelCase<'a_b_c'>—
      → 'aBC'

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

    La solución

    type CamelCase<S extends string> =
      S extends `${infer H}_${infer T}` ? `${H}${CamelCase<Capitalize<T>>}` : S

    El error más común

    type CamelCase<S extends string> =
      S extends `${infer H}_${infer T}` ? `${H}${CamelCase<T>}` : S

    Se elimina el guion bajo pero no se capitaliza nada, así que "foo_bar" queda en "foobar". Quitar el separador es solo la mitad de la transformación — el cambio de mayúscula es la otra mitad.

    Línea por línea

    1. Capitalize<T>

      Uno de los cuatro tipos de cadena intrínsecos que el compilador implementa de forma nativa — Uppercase, Lowercase, Capitalize, Uncapitalize. No tienen código TypeScript; están dentro del comprobador.

    2. CamelCase<Capitalize<T>>

      Capitalizar *antes* de recurrir hace que cada nivel solo tenga que ocuparse del guion bajo más cercano al principio. Por eso "a_b_c" da "aBC" — la recursión capitaliza cada segmento restante por turno.

    Para recordar

    Los tipos intrínsecos de mayúsculas hacen la manipulación de cadenas a nivel de tipos mucho menos dolorosa de lo que tendría derecho a ser. Recurre a ellos antes de escribir una recursión carácter a carácter.

    Usa