Saltar al contenido
webtype.orgwebtype.org#217 split-string · par 4

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 217 · 25 de julio de 2026 · Difícil

    Divide

    Implementa `Split<S, D>` para que divida la cadena `S` en cada aparición del delimitador `D`, devolviendo una tupla de las piezas.

    01

    Intenta el puzle tú mismo

    Par 4

    Puzle

    split-string.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
    • Split<'a,b,c', ','>
      ['a', 'b', 'c']
    • Split<'nope', ','>
      ['nope']
    • Split<'a/b', '/'>
      ['a', 'b']
    • Split<'', ','>
      ['']

    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 26 de julio de 2026

    La solución

    type Split<S extends string, D extends string> =
      S extends `${infer Head}${D}${infer Tail}` ? [Head, ...Split<Tail, D>] : [S]

    El error más común

    type Split<S extends string, D extends string> =
      S extends `${infer Head}${D}${infer Tail}` ? [Head, Split<Tail, D>] : [S]

    Sin la expansión, cada resultado recursivo queda anidado un nivel más: `["a", ["b", ["c"]]]`. Los `...` son los que aplanan la recursión en una sola tupla.

    Línea por línea

    1. `${infer Head}${D}${infer Tail}`

      La inferencia contra un literal de plantilla es ávida desde la izquierda, así que `Head` liga el prefijo más corto que permita encajar el resto del patrón — dando el primer campo, no el último.

    2. [Head, ...Split<Tail, D>]

      La expansión incorpora en línea la tupla recursiva, de modo que cada nivel aporta un elemento a un resultado plano.

    3. : [S]

      No queda delimitador. Toda la cadena restante es la última pieza, envuelta en una tupla para que la expansión de arriba tenga algo que incorporar.

    Para recordar

    Los tipos de cadena recursivos se descomponen por la cabeza y se reconstruyen con expansiones. Olvidar la expansión es el error más común al construir listas a nivel de tipos.

    Usa