Historia del problema:
JavaScript permite aplicar métodos bind, call y apply para establecer el contexto (this) y argumentos. Hasta la aparición de TypeScript 3.2, estos métodos se percibían de manera menos estricta: a menudo se permitían valores extra o incorrectos en sus argumentos, lo que generaba errores en tiempo de ejecución. TypeScript implementó el parámetro strictBindCallApply, que añade una verificación estricta de las firmas de estos métodos.
Problema:
Sin una tipificación estricta, los métodos bind/call/apply permitían "pasar por alto" arguments extra, faltantes o de tipo mismatched sin errores en tiempo de compilación.
Solución:
Con la activación de strictBindCallApply, el compilador TypeScript requiere estrictamente que:
Ejemplo de código:
function sum(a: number, b: number): number { return a + b; } const sum2 = sum.bind(null, 1); sum2(2); // OK sum2(2, 3); // Error en strictBindCallApply
Características clave:
¿strictBindCallApply solo funciona para funciones, o también afecta a métodos de clase?
Afecta tanto a funciones como a métodos, porque los métodos bind/call/apply están disponibles en cualquier función (Function.prototype). Esto se aplica tanto a funciones independientes como a métodos de clases.
¿Puede activarse el parámetro strictBindCallApply sin el modo estricto?
No, para activarlo es necesario strict=true o especificar directamente strictBindCallApply=true en tsconfig.json.
¿Qué sucederá si se pasan más parámetros a través de bind de los que están definidos en la función original?
El compilador TypeScript con strictBindCallApply activado generará un error: "Se esperaban X argumentos, pero se recibieron Y". Esto protege contra el error común de firma prolongada o la captura accidental de variables adicionales.
** Caso negativo Un desarrollador utiliza .bind para la aplicación parcial de argumentos, pero se equivoca en su cantidad. En el modo normal, no hay errores, pero en producción, la función se llama con un parámetro extra y la lógica falla.
Ventajas:
Desventajas:
**Caso positivo El strictBindCallApply está activado, las funciones y métodos utilizan bind estrictamente según la firma: argumentos extra o erróneos son descartados en tiempo de compilación.
Ventajas:
Desventajas: