Historique de la question :
JavaScript permet d'utiliser les méthodes bind, call et apply pour passer le contexte (this) et les arguments. Avant l'apparition de TypeScript 3.2, ces méthodes étaient considérées comme moins strictes : leurs arguments acceptaient souvent des valeurs superflues ou incorrectes, ce qui entraînait des erreurs d'exécution. TypeScript a mis en œuvre le paramètre strictBindCallApply, qui ajoute une vérification stricte des signatures de ces méthodes.
Problème :
Sans typage strict, les méthodes bind/call/apply permettaient de "passer" des arguments superflus, manquants ou ne correspondant pas au type sans générer d'erreurs au moment de la compilation.
Solution :
Avec l'activation de strictBindCallApply, le compilateur TypeScript exige strictement que :
Exemple de code :
function sum(a: number, b: number): number { return a + b; } const sum2 = sum.bind(null, 1); sum2(2); // OK sum2(2, 3); // Erreur dans strictBindCallApply
Caractéristiques clés :
Le strictBindCallApply ne fonctionne-t-il que pour les fonctions, ou influence-t-il aussi les méthodes de classe ?
Il influence à la fois les fonctions et les méthodes, car les méthodes bind/call/apply sont disponibles pour chaque fonction (Function.prototype). Cela concerne à la fois les fonctions indépendantes et les méthodes de classes.
Le paramètre strictBindCallApply peut-il être activé sans mode strict ?
Non, pour l'activer, strict=true est nécessaire ou une déclaration directe strictBindCallApply=true dans tsconfig.json.
Que se passe-t-il si l'on passe plus de paramètres via bind que ce qui est défini dans la fonction d'origine ?
Le compilateur TypeScript avec strictBindCallApply activé émettra une erreur : "Expected X arguments, but got Y". Cela protège contre l'erreur courante de signature prolongée ou la capture accidentelle de variables supplémentaires.
** Cas négatif Un développeur utilise .bind pour appliquer partiellement des arguments, mais se trompe dans leur quantité. En mode normal, il n'y a pas d'erreurs, mais en production, la fonction est appelée avec un paramètre supplémentaire et la logique se brise.
Avantages :
Inconvénients :
** Cas positif strictBindCallApply est activé, les fonctions et méthodes utilisent bind strictement selon la signature : les arguments superflus ou incorrects sont filtrés au moment de la compilation.
Avantages :
Inconvénients :