Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 233 · 16 de agosto de 2026 · Media

    EmpiezaPor

    Implementa StartsWith<S, P> para que indique si la cadena S empieza por el prefijo P. Empezar por, no simplemente contener.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    starts-with.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
    • StartsWith<'hello world', 'hello'>—
      → true
    • StartsWith<'hello world', 'world'>—
      → false
    • StartsWith<'abc', ''>—
      → true
    • StartsWith<'', 'a'>—
      → false

    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 17 de agosto de 2026

    La solución

    type StartsWith<S extends string, P extends string> =
      S extends `${P}${string}` ? true : false

    El error más común

    type StartsWith<S extends string, P extends string> =
      S extends `${string}${P}${string}` ? true : false

    Esto pregunta si P aparece *en cualquier sitio* — es includes, no startsWith. El ${string} inicial deja que el emparejamiento se desplace más allá del principio, así que "hello world" responde true para el prefijo "world".

    Línea por línea

    1. `${P}${string}`

      Un patrón de literal de plantilla está anclado por ambos extremos. Poner P primero exige que los primeros caracteres de S sean P; el ${string} final acepta luego cualquier resto, incluso ninguno.

    2. StartsWith<'abc', ''>

      El prefijo vacío reduce el patrón a ${string}, que satisface toda cadena — así que la respuesta es true, igual que "abc".startsWith("") en tiempo de ejecución.

    Para recordar

    Donde pones ${string} en un patrón es donde permites holgura. Holgura al principio significa «contiene», al final «empieza por», y a ambos lados significa que has escrito un test de subcadena sin querer.

    Usa