Geschiedenis van de vraag:
JavaScript staat het toepassen van de methoden bind, call en apply toe voor het doorgeven van de context (this) en argumenten. Tot TypeScript 3.2 werden deze methoden minder strikt opgevat: hun argumenten stonden vaak extra of onjuiste waarden toe, wat runtime-fouten veroorzaakte. TypeScript heeft de parameter strictBindCallApply geïmplementeerd, die een strikte controle van de handtekeningen van deze methoden toevoegt.
Probleem:
Zonder strikte typisatie lieten de methoden bind/call/apply "door" extra, ontbrekende of type-inconsistente argumenten zonder enige foutmelding tijdens de compilatie.
Oplossing:
Met de inschakeling van strictBindCallApply vereist de TypeScript-compiler strikt dat:
Voorbeeldcode:
function sum(a: number, b: number): number { return a + b; } const sum2 = sum.bind(null, 1); sum2(2); // OK sum2(2, 3); // Fout in strictBindCallApply
Belangrijke kenmerken:
Werkt strictBindCallApply alleen voor functies, of beïnvloedt het ook methoden van een klasse?
Het beïnvloedt zowel functies als methoden, omdat de methoden bind/call/apply beschikbaar zijn op elke functie (Function.prototype). Dit geldt voor zowel onafhankelijke functies als methoden van klassen.
Kan de parameter strictBindCallApply worden ingeschakeld zonder de strikte modus strict?
Nee, om het te activeren is strict=true nodig of een directe specificatie van strictBindCallApply=true in tsconfig.json.
Wat gebeurt er als er via bind meer parameters worden doorgegeven dan er in de oorspronkelijke functie zijn gedefinieerd?
De TypeScript-compiler met ingeschakeld strictBindCallApply geeft een foutmelding: "Expected X arguments, but got Y". Dit beschermt tegen de veel voorkomende fout van een verlengde handtekening of per ongeluk extra variabelen op te vangen.
** Negatief geval Een ontwikkelaar gebruikt .bind voor partiële toepassing van argumenten, maar maakt een fout in hun aantal. In de normale modus zijn er geen fouten, maar in productie wordt de functie aangeroepen met een extra parameter en wordt de logica verbroken.
Voordelen:
Nadelen:
** Positief geval StrictBindCallApply is ingeschakeld, functies en methoden gebruiken bind strikt volgens de handtekening: extra of onjuiste argumenten worden tijdens de compilatie gefilterd.
Voordelen:
Nadelen: