TypeScript heeft een krachtig systeem voor typeinferentie. In de meeste gevallen worden types van variabelen, parameters en retourwaarden automatisch berekend op basis van de context. Er zijn verschillende niveaus van typeinferentie:
Voorbeelden:
let a = 2; // number let b = [1, "a"]; // (number | string)[] window.addEventListener('click', e => { // e: MouseEvent });
Beperking: als de compiler het type niet ondubbelzinnig kan infereren, kiest deze de breedste (meestal is dit any), wat de voordelen van typechecking tenietdoet.
Wordt het argument van een functie getypeerd als er geen expliciet type is opgegeven, maar de functie later wordt gebruikt met een getypeerde waarde?
Onjuist antwoord: Ja, TypeScript raadt altijd automatisch het type van het argument.
Juist antwoord: Nee. Alleen als de context van de functie informatie over het type bevat, krijgt het argument een type. Anders wordt het any of een ander basistype, wat tot fouten leidt. Het is altijd aan te raden om invoer expliciet te typen.
Voorbeeld:
function f(x) { return x.toFixed(2); // Fout: x is van type any }
Verhaal
In een project was het terugkerende type van een aangepaste React hook niet expliciet opgegeven, en TypeScript zag niet dat het type
undefinedkon zijn. Hierdoor leidde het aanroepen van een methode op het object zonder controle tot runtime-fouten.
Verhaal
Bij het maken van een array met mixed-type waarden werd het uiteindelijke type automatisch afgeleid als een array
any[], omdat er geen expliciet type was opgegeven, wat leidde tot verlies van alle voordelen van typechecking in de daaropvolgende code.
Verhaal
De validatie van invoerparameters van de service was niet getypeerd en was afhankelijk van de "intelligentie" van TypeScript. Na een refactoring van de codebasis gaf de automatische inferentie een te algemeen type, en typefouten kwamen in productie terecht.