Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 228 · 5 de agosto de 2026 · Media

    Reemplaza

    Implementa Replace<S, From, To> para que reemplace la **primera** aparición de From en S por To. Un From vacío no reemplaza nada.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    replace-string.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

    4
    • Replace<'hello world', 'world', 'there'>—
      → 'hello there'
    • Replace<'abc', 'x', 'y'>—
      → 'abc'
    • Replace<'aaa', 'a', 'b'>—
      → 'baa'
    • Replace<'abc', '', 'x'>—
      → '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 6 de agosto de 2026

    La solución

    type Replace<S extends string, From extends string, To extends string> =
      From extends ''
        ? S
        : S extends `${infer H}${From}${infer T}`
          ? `${H}${To}${T}`
          : S

    El error más común

    type Replace<S extends string, From extends string, To extends string> =
      S extends `${infer H}${From}${infer T}` ? `${H}${To}${T}` : S

    Correcto para toda entrada salvo un From vacío. La cadena vacía cabe entre dos caracteres cualesquiera, así que el patrón encaja con H vacío e inserta To al principio — Replace<"abc", "", "x"> da "xabc".

    Línea por línea

    1. From extends '' ? S

      La guarda debe ir primero. Una vez alcanzado el patrón de plantilla, un From vacío ya ha hecho que el emparejamiento tenga éxito, y después no hay forma de distinguirlo.

    2. `${infer H}${From}${infer T}`

      La inferencia es ávida desde la izquierda, así que H toma el prefijo más corto que aún permita encajar el resto. Por eso se reemplaza únicamente la *primera* aparición.

    Para recordar

    La cadena vacía es el null de los tipos de literal de plantilla: encaja en todas partes y rompe en silencio los patrones que asumen que encajar significa haber encontrado algo.

    Usa