ProgrammatieFullstack ontwikkelaar

Hoe implementeer je en typeer je correct een callbackfunctie met parameters die optioneel kunnen zijn of standaardwaarden hebben? Welke complicaties kunnen zich voordoen en hoe kun je deze vermijden?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Geschiedenis van de vraag:

Callback-functies zijn een veelvoorkomend verschijnsel in JS en TS voor asynchroon programmeren en verantwoordelijkheidsdelegatie. Typisatie van dergelijke functies in TypeScript is een belangrijk onderdeel van het waarborgen van de veiligheid, vooral als parameters optioneel kunnen zijn of standaardwaarden hebben.

Probleem:

In dynamisch JS leidt het gebrek aan typisatie van callback-argumenten tot fouten bij het doorgeven van waarden, verwarring met undefined en verkeerde volgorde van parameters. In TypeScript is typisatie vereist om dergelijke problemen te voorkomen, maar van buitenaf is het moeilijk om alle nuances met betrekking tot optioneel zijn, volgorde en standaardwaarden te respecteren.

Oplossing:

Geef expliciet de typen van alle parameters aan, geef optionele parameters aan met een vraagteken en geef standaardwaarden rechtstreeks bij de functiedeclaratie aan, en vergeet niet ze correct in het type te beschrijven.

Codevoorbeeld:

function fetchData( url: string, callback: (data: any, error?: Error) => void ) { // ... } // Callback met optionele parameter error fetchData('/api', (data, error) => { if (error) { // verwerking } else { // succes } }); // Callback met parameter standaardwaarde function process( cb: (x: number, y?: number) => void = (x, y = 10) => { /* ... */ } ) { /* ... */ }

Belangrijke kenmerken:

  • Voor optionele parameters wordt het teken "?" gebruikt.
  • Voor standaardwaarden wordt de standaardwaarde vermeld in de functiedefinitie.
  • Typisatie maakt het gemakkelijker om de code te onderhouden en vermindert het aantal fouten.

Vragen met een valstrik.

Moet de consument van de callback expliciet rekening houden met alle parameters, inclusief optionele?

Nee, hij kan optionele parameters weglaten, en TypeScript genereert geen fout — verwerking gebeurt correct dankzij de vraagteken-syntaxis.

Kan de eerste parameter in de callback optioneel zijn, terwijl de tweede verplicht is?

Nee. Optionele parameters moeten altijd aan het einde van de argumentenlijst komen. Het schenden van de volgorde leidt tot een typefout.

Wat gebeurt er als optioneel zijn van een parameter niet wordt aangegeven, maar deze niet wordt doorgegeven bij de aanroep?

TypeScript genereert een fout — als de parameter verplicht is, moet deze worden doorgegeven. Alleen optionele of met standaardwaarden kunnen worden weggelaten.

Typische fouten en anti-patronen

  • Het schenden van de volgorde van optionele en verplichte parameters (eerst verplichte, dan optionele).
  • Het ontbreken van expliciete type-aanduidingen of "any" — leidt tot verlies van de voordelen van TypeScript.
  • Pogingen om undefined door te geven in plaats van een waarde en het verwachten van het in werking treden van de default (dit gebeurt alleen bij afwezigheid van een argument).

praktijkvoorbeeld

Negatief geval

De tweede parameter van de callback als verplicht gemarkeerd, maar niet doorgegeven bij de aanroep. Ontvangen compileerfout.

Voordelen:

  • Snelle en eenvoudig geschreven code zonder verduidelijkingen.

Nadelen:

  • Compilatie mislukt.
  • Verlies van flexibiliteit en verwarrende verantwoordelijkheden.

Positief geval

Typiseerde callback met optionele parameter:

(cb: (x: number, y?: number) => void)

of stelde default in:

f = (x: number, y = 10) => { ... }

Voordelen:

  • Zekerheid dat er geen fouten optreden bij het aanroepen van callbacks.
  • Leesbaarheid en onderhoudbaarheid.

Nadelen:

  • Je moet voorzichtig zijn met de volgorde van parameters.