ProgrammierungFullstack-Entwickler / Frontend-Entwickler

Wie funktioniert die Typisierung von Callback-Funktionen in TypeScript und was muss bei der Typisierung von Parametern und Rückgabewerten von Callbacks berücksichtigt werden?

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

Antwort

In TypeScript wird empfohlen, die Typen für Callback-Funktionen klar zu definieren. Die Definition von Parametertypen und Rückgabewerten hilft, Fehler zu vermeiden:

type Callback = (event: string, id: number) => boolean; function useCallback(cb: Callback) { // ... }
  • Alle Parameter und der Rückgabewert sollten explizit typisiert werden.
  • Wenn die Funktion void zurückgeben kann (nichts zurückgibt) — sollte dies angegeben werden: () => void.
  • Closures, this und Überladungen müssen ebenfalls bei der Typisierung berücksichtigt werden.
  • Wenn eine Funktion mit Callback an externen Interaktionen beteiligt ist (z. B. React/Node.js), sollten die Typen mit den externen Deklarationen übereinstimmen.

Fangfrage

Ist es notwendig, die Typen von Parametern und Rückgabewerten in der Definition der Callback-Funktion anzugeben, wenn TypeScript sie automatisch ableiten kann?

Antwort: Nicht unbedingt, TypeScript kann die Typen von Callback-Argumenten ableiten, jedoch ist es für öffentliche APIs und komplexe kombinierbare Funktionen äußerst wünschenswert, alle Typen explizit anzugeben. Dies erleichtert die Wartung und verhindert unerwünschte Fehler bei Änderungen an den Funktionsverträgen.

Beispiele für reale Fehler aufgrund von Unkenntnis der Feinheiten des Themas


Geschichte

Im Projekt wurde ein Callback ohne explizite Typisierung des Rückgabewertes verwendet, und einer der Entwickler begann, aus der Funktion einen String anstelle des erwarteten Boolean zurückzugeben. Dies führte nicht zu einem Fehler beim Kompilieren aufgrund des Standardwerts any, aber die Logik der Funktion brach zusammen, was einen Bug in der Produktion verursachte.


Geschichte

In einem großen React-Projekt wurde vergessen, die Parameter von Event-Callbacks ausdrücklich zu typisieren. Bei der Aktualisierung auf eine neue Version von React haben sich die Ereignistypen geändert, und der Code wurde mit Fehlern kompiliert. Es musste hastig die Callback-Funktion auf allen Seiten korrigiert werden.


Geschichte

In einer Node.js-Anwendung wurde der Callback für eine asynchrone Funktion nicht typisiert: Der erhaltene Wert wurde fälschlicherweise als String wahrgenommen, obwohl es sich um ein Fehlerobjekt handelte. Diese Typeninkongruenz führte dazu, dass Fehler nicht korrekt verarbeitet werden konnten.