Saltar al contenido
webtype.org#228 replace-string · par 3

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.

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.