Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 260 · 12 de septiembre de 2026 · Difícil

    Cuánto mide

    Implementa StrLength<S> para que produzca el número de caracteres del literal de cadena S.

    01

    Intenta el puzle tú mismo

    Par 4

    Puzle

    string-length.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
    • StrLength<'hello'>—
      → 5
    • StrLength<''>—
      → 0
    • StrLength<'ab'>—
      → 2

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

    La solución

    type StrLength<S extends string, R extends unknown[] = []> =
      S extends `${string}${infer Rest}` ? StrLength<Rest, [...R, unknown]> : R['length']

    El error más común

    type StrLength<S extends string, R extends unknown[] = []> = S['length']

    Un tipo de cadena sí tiene length, y es number — el general, no 5. Solo las tuplas llevan su longitud como tipo literal. Por eso casi todo tipo que cuenta en TypeScript se escribe con un acumulador de tupla cuyo contenido nadie llega a leer nunca.

    Línea por línea

    1. `${string}${infer Rest}`

      El primer marcador es string y no infer porque el carácter en sí no importa — solo que hubiera uno.

    2. [...R, unknown]

      El acumulador es una cuenta de muescas. El tipo de sus elementos es irrelevante; se elige unknown precisamente porque nadie mirará nunca dentro.

    3. R['length']

      Y aquí se cobra la cuenta. Como R es una tupla, su length es el literal 5, que es lo que pide la comprobación.

    Para recordar

    Los números a nivel de tipos son longitudes de tupla. Siempre que necesites contar algo, la respuesta es una tupla que haces crecer y a la que luego preguntas su longitud.

    Usa