Saltar al contenido
webtype.orgwebtype.orgtsconfig

    ↑↓ mover · ⏎ abrir · esc cerrar

    tsconfig

    strictBindCallApply

    call, apply y bind reciben firmas reales

    Sin ella, estos tres aceptan cualquier argumento, porque sus tipos declarados dicen `any[]`.

    Desde
    TypeScript 3.2
    strict
    En strict
    En tu tsconfig
    "strictBindCallApply": true
    Compilado con
    "strict": true

    El mismo fragmento las dos veces. Solo cambió la opción.

    Con ella apagada

    "strictBindCallApply": false
    function greet(name: string) {
      return name
    }
    
    export const wrong = greet.call(undefined, 42)

    Compila limpio

    Con ella encendida

    "strictBindCallApply": true
    function greet(name: string) {
      return name
    }
    
    export const wrong = greet.call(undefined, 42)

    Emite TS2345

    Por qué al compilador le importa

    La comprobación era imposible de expresar hasta que existieron las tuplas variádicas, así que la biblioteca estándar declaró estos métodos con `any[]` y toda llamada a través de ellos quedaba sin comprobar. Es un agujero extraño en una compilación por lo demás estricta: el mismo error escrito como llamada directa se detecta, y escrito con `.call` no. La bandera sustituye esas firmas por las genéricas que hacen la aritmética sobre la tupla de parámetros.

    Conclusión

    Si la comprobación se hace con tuplas variádicas, un compilador demasiado antiguo para ellas no puede comprobarlo.

    Adónde ir después

    22 opciones