Saltar al contenido
webtype.org#231 camel-case · par 4

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.

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.