W TypeScript zaleca się wyraźne definiowanie typów dla funkcji zwrotnych. Określenie typów parametrów i wartości zwracanych pomaga zapobiegać błędom:
type Callback = (event: string, id: number) => boolean; function useCallback(cb: Callback) { // ... }
void (nic nie zwraca) — powinno to być wskazane: () => void.Czy konieczne jest podawanie typów parametrów i wartości zwracanej w definicji funkcji callback, jeśli TypeScript potrafi je automatycznie wywnioskować?
Odpowiedź: Nie jest to konieczne, TypeScript potrafi wywnioskować typy argumentów callbacków, jednak w przypadku publicznych API i złożonych funkcji kompozytowych bardzo zaleca się explicite podawać wszystkie typy. Ułatwia to utrzymanie i zapobiega niepożądanym błędom przy zmianach kontraktów funkcji.
Historia
W projekcie używano callbacków bez wyraźnej typizacji wartości zwracanej, a jeden z programistów zaczął zwracać z funkcji string zamiast oczekiwanego boolean. Nie spowodowało to błędu na etapie kompilacji z powodu domyślnego any, ale logika działania funkcji została zepsuta, co doprowadziło do błędu na produkcji.
Historia
W dużym projekcie React zapomniano wyraźnie typizować parametry event-callbacków. Przy przejściu na nową wersję React typy zdarzeń się zmieniły, a kod zaczął kompilować z błędami. Trzeba było pilnie poprawiać funkcję zwrotną na wszystkich stronach.
Historia
W aplikacji Node.js nie był typizowany callback do pracy z funkcją asynchroniczną: otrzymana wartość została błędnie uznana za string, chociaż był to obiekt error. Niezgodność typów doprowadziła do niemożności poprawnej obsługi błędów.