Saltar al contenido
webtype.orgwebtype.org#267 kebab-case · par 4

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 267 · 19 de septiembre de 2026 · Difícil

    Kebab case

    Implementa `KebabCase<S>` para convertir una cadena camelCase o PascalCase en palabras minúsculas unidas por guiones.

    01

    Intenta el puzle tú mismo

    Par 4

    Puzle

    kebab-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

    3
    • KebabCase<'FooBar'>
      'foo-bar'
    • KebabCase<'alreadyKebab'>
      'already-kebab'
    • KebabCase<'plain'>
      'plain'

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

    La solución

    type KebabCase<S extends string> =
      S extends `${infer H}${infer R}`
        ? R extends Uncapitalize<R>
          ? `${Lowercase<H>}${KebabCase<R>}`
          : `${Lowercase<H>}-${KebabCase<R>}`
        : S

    El error más común

    type KebabCase<S extends string> = Lowercase<S>

    `Lowercase` cambia las letras pero olvida dónde estaban los límites de palabra. Cuando desaparecen las mayúsculas ya no queda información para insertar los guiones.

    Línea por línea

    1. R extends Uncapitalize<R>

      El sufijo empieza en minúscula cuando `Uncapitalize` no lo cambia. Si lo cambia, su primer carácter marca una palabra nueva.

    Para recordar

    La conversión de mayúsculas debe detectar los límites antes de normalizar, porque la transformación destruye la evidencia necesaria para analizar.

    Usa