ProgrammierungFullstack Entwickler

Wie implementiert und typisiert man eine Rückruffunktion (Callback) korrekt mit Parametern, die optional sein können oder Standardwerte haben? Welche Schwierigkeiten können auftreten und wie kann man sie vermeiden?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

Hintergrund:

Callback-Funktionen sind eine gängige Praxis in JS und TS für asynchrone Programmierung und Delegation von Verantwortung. In TypeScript ist die Typisierung solcher Funktionen ein wichtiger Bestandteil der Sicherheit, insbesondere wenn die Parameter optional sein oder Standardwerte haben können.

Problem:

Im dynamischen JS führt das Fehlen der Typisierung von Callback-Argumenten zu Fehlern bei der Wertübergabe, Verwirrung mit undefined und falscher Parameterreihenfolge. In TypeScript ist die Typisierung erforderlich, um solche Probleme zu vermeiden, aber draußen ist es schwierig, alle Feinheiten in Bezug auf Optionalität, Reihenfolge und Standardwerte einzuhalten.

Lösung:

Alle Parametertypen explizit angeben, optionale Parameter mit einem Fragezeichen kennzeichnen und Standardwerte direkt bei der Funktionsdeklaration angeben, und nicht vergessen, diese korrekt im Typ zu beschreiben.

Beispielcode:

function fetchData( url: string, callback: (data: any, error?: Error) => void ) { // ... } // Callback mit optionalem Parameter error fetchData('/api', (data, error) => { if (error) { // Verarbeitung } else { // Erfolg } }); // Callback mit Standardparameter function process( cb: (x: number, y?: number) => void = (x, y = 10) => { /* ... */ } ) { /* ... */ }

Wichtige Merkmale:

  • Für optionale Parameter wird das Zeichen "?" verwendet.
  • Für Standardwerte wird der Standardwert in der Funktionsdefinition angegeben.
  • Typisierung erleichtert die Wartung des Codes und reduziert Fehler.

Fangfragen.

Muss der Verbraucher des Callbacks alle Parameter, einschließlich der optionalen, explizit berücksichtigen?

Nein, er kann optionale Parameter weglassen, und TypeScript gibt keinen Fehler aus — die Verarbeitung erfolgt korrekt dank der Syntax des Fragezeichens.

Kann der erste Parameter im Callback optional sein, während der zweite obligatorisch ist?

Nein. Optionale Parameter müssen immer am Ende der Argumenteliste stehen. Eine Verletzung der Reihenfolge führt zu einem Typisierungsfehler.

Was passiert, wenn man die Optionalität eines Parameters nicht angibt, ihn aber bei der Aufrufstelle nicht übergibt?

TypeScript gibt einen Fehler aus — wenn der Parameter obligatorisch ist, muss er übergeben werden. Nur optionale oder solche mit Default können weggelassen werden.

Typische Fehler und Antipatterns

  • Verletzung der Reihenfolge von optionalen und obligatorischen Parametern (zuerst obligatorische, dann optionale).
  • Fehlen einer klaren Typangabe oder "any" — führt zum Verlust der Vorteile von TypeScript.
  • Versuche, undefined anstelle eines Wertes zu übergeben und auf das Auslösen des Defaults zu warten (dies geschieht nur, wenn das Argument fehlt).

Beispiel aus dem Leben

Negativer Fall

Der zweite Argument des Callbacks wurde als obligatorisch deklariert, aber im Aufruf nicht übergeben. Dies führte zu einem Kompilierungsfehler.

Vorteile:

  • Schnell und einfach geschriebener Code ohne Erläuterungen.

Nachteile:

  • Kompiliert nicht.
  • Verlust von Flexibilität und verworrene Verantwortung.

Positiver Fall

Typisiert Callback mit optionalem Parameter:

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

oder legte einen Default fest:

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

Vorteile:

  • Garantie für das Fehlen von Fehlern bei der Callback-Aufruf.
  • Lesbarkeit und Wartbarkeit.

Nachteile:

  • Man muss auf die Reihenfolge der Parameter achten.