TypeScriptでは、コールバック関数の型を明確に定義することが推奨されます。引数と戻り値の型を定義することで、エラーを防ぐことができます:
type Callback = (event: string, id: number) => boolean; function useCallback(cb: Callback) { // ... }
voidを返す可能性がある場合(何も返さない)には、これを明示すべきです:() => void。TypeScriptが自動的に型を推論できる場合、コールバック関数の引数や戻り値の型を指定する必要がありますか?
回答: 必要ありません。TypeScriptはコールバック引数の型を推論できますが、パブリックAPIや複雑な合成関数の場合はすべての型を明示することが非常に望ましいです。これにより、メンテナンスが容易になり、関数の契約が変更された際に望ましくないエラーを防ぐことができます。
物語
プロジェクトでは戻り値の型を明示的に指定せずにコールバックを使用しており、ある開発者が期待されるブール値の代わりに文字列を返し始めました。デフォルトのanyのためにコンパイル時にエラーは発生しませんでしたが、関数のロジックが壊れて、プロダクションでバグを引き起こしました。
物語
大規模なReactプロジェクトでは、イベントコールバックの引数を明示的に型付けするのを忘れました。新しいバージョンのReactに移行すると、イベントの型が変更され、コードがエラーでコンパイルされるようになりました。すべてのページでコールバック関数を修正する必要がありました。
物語
Node.jsアプリケーションでは、非同期関数作業のためのコールバックが型付けされていませんでした:取得した値がstringとして誤って認識され、実際にはerrorオブジェクトでした。型の不一致は、エラーを正しく処理できない原因となりました。