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": falsefunction greet(name: string) { return name } export const wrong = greet.call(undefined, 42)
Compila limpio
Con ella encendida
"strictBindCallApply": truefunction 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

