ProgrammatieFrontend ontwikkelaar / Fullstack ontwikkelaar

Hoe werkt het systeem voor automatische typeinferentie in TypeScript? Welke niveaus van typeinferentie zijn er en welke fouten kunnen worden gemaakt bij het rekenen op de 'intelligentie' van de compiler?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

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:

  • Eenvoudige inferentie: bij het declareren van variabelen zonder expliciet type
  • Contextuele inferentie: wanneer het type van een expressie wordt bepaald uit de context (bijvoorbeeld een gebeurtenis handler)
  • Beste gemeenschappelijke type: voor arrays met elementen van verschillende types - de meest algemene wordt gezocht

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.

Lastige vraag

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 }

Voorbeelden van echte fouten door gebrek aan kennis van de nuances van het onderwerp


Verhaal

In een project was het terugkerende type van een aangepaste React hook niet expliciet opgegeven, en TypeScript zag niet dat het type undefined kon 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.