编程全栈开发者 / 前端开发者

TypeScript中回调函数的类型化是如何工作的,类型化回调的参数和返回值时需要考虑哪些事项?

用 Hintsage AI 助手通过面试

答案

在TypeScript中,建议明确描述回调函数的类型。明确参数和返回值的类型有助于防止错误:

type Callback = (event: string, id: number) => boolean; function useCallback(cb: Callback) { // ... }
  • 所有参数和返回值应该显式类型化。
  • 如果函数可能返回void(不返回任何值),这应该被指明:() => void
  • 闭包、this和重载在类型化时也需要考虑。
  • 如果带有回调的函数参与外部交互(例如,React/Node.js),类型应与外部声明匹配。

误导性问题

在定义回调函数时,如果TypeScript可以自动推导它们,是否一定要指定参数和返回值的类型?

回答: 不一定,TypeScript可以推导回调参数的类型,但是对于公共API和复杂的组合函数,明确指定所有类型是非常可取的。这有助于维护并防止在更改函数合同时出现不必要的错误。

由于缺乏对主题细微差别的了解而导致的真实错误示例


故事

在项目中使用了未显式类型化返回值的回调,一个开发者开始从函数中返回字符串,而不是预期的布尔值。这在编译阶段由于默认的any没有引发错误,但函数的逻辑被破坏,导致在生产环境中出现了bug。


故事

在一个大型React项目中,忘记显式类型化事件回调的参数。切换到新版本的React后,事件的类型发生了变化,代码开始出现编译错误。不得不紧急修复所有页面的回调函数。


故事

在Node.js应用程序中,与异步函数一起使用的回调没有进行类型化:获取的值错误地被识别为字符串,而实际上是错误对象。类型不匹配导致无法正确处理错误。