跳转到主要内容

TypeScript 中的错误处理光谱

看了 Theo 的一个视频,讲到了 TypeScript 中的错误处理,把各种“流派”按照对错误的态度(从不在意到视为核心)划分了一个光谱:

  • 完全不管:默认状态,到处 try catch (很不幸我也是这样的)
  • 低度关心:认识到错误需要被明确表达,而不是被隐藏在执行流中;用 tryCatch 或类似实现,让错误在调用返回中明确(const {data, err} = await someFunc(),类似于 Go 的写法)
  • 中等关心:认为需要一个专门的库来封装错误;例如 neverthrow,实现了 Rust 风格的 Ok, Err 和 chaining
  • 高度关心:认为需要围绕错误和异常状态设计整个应用;例如 effect 作为一个完整的框架,写起来其实已经不像是 TypeScript 了

我自己在写代码的时候,其实有的时候也会对到处 try-catch,catch 了又 throw 有点烦躁,但是不知道什么是更好的做法。看起来可以试试低度关心,再给错误层级有合理封装(至少 throw 之前包一层)。

video: https://www.youtube.com/watch?v=Y6jT-IkV0VM