Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 250 · 2 de septiembre de 2026 · Media

    Rellenar

    Implementa Fill<N, V> para que produzca una tupla de exactamente N elementos, cada uno de tipo V.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    fill-tuple.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

    3
    • Fill<3, 'x'>—
      → ['x', 'x', 'x']
    • Fill<0, number>—
      → []
    • Fill<2, true>—
      → [true, true]

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

    La solución

    type Fill<N extends number, V, R extends V[] = []> = R['length'] extends N ? R : Fill<N, V, [...R, V]>

    El error más común

    type Fill<N extends number, V, R extends V[] = []> = R['length'] extends N ? R : [...R, V]

    Esto añade un elemento y se detiene. La rama else tiene que volver a llamar a Fill — añadir es el paso, no la respuesta. Escrito así, Fill<3, "x"> devuelve ["x"], porque el tipo se ejecutó exactamente una vez.

    Línea por línea

    1. R['length'] extends N ? R : ...

      El acumulador es también el contador. Una tupla conoce su propia longitud, así que no hay aritmética que hacer — basta con preguntar si ya llegó a N.

    2. Fill<N, V, [...R, V]>

      Cada recursión entrega a la llamada siguiente una tupla algo más larga. Fill<0, number> no entra nunca en esta rama, porque un acumulador vacío ya tiene la longitud pedida.

    Para recordar

    Un parámetro acumulador convierte un tipo recursivo en un bucle con una variable. El caso base es una pregunta sobre el acumulador, y el paso es el mismo tipo llamado con uno mayor.

    Usa