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:
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.
De tweede parameter van de callback als verplicht gemarkeerd, maar niet doorgegeven bij de aanroep. Ontvangen compileerfout.
Voordelen:
Nadelen:
Typiseerde callback met optionele parameter:
(cb: (x: number, y?: number) => void)
of stelde default in:
f = (x: number, y = 10) => { ... }
Voordelen:
Nadelen: