fp-ts-errors

使用fp-ts的Either和TaskEither将错误作为值处理,可编写更清晰、更可预测的TypeScript代码。适用于基于fp-ts实现错误处理模式时。

作者

安装

热度:3

下载并解压到你的 skills 目录

复制命令,发送给 OpenClaw 自动安装:

下载并安装这个技能 https://openskills.cc/api/download?slug=sickn33-skills-fp-ts-errors&locale=zh&source=copy

fp-ts-errors - TypeScript 函数式错误处理实战

技能概述


使用 fp-ts 的 Either 和 TaskEither 将错误作为值处理,用类型安全的函数式模式替代 try/catch,让 TypeScript 代码更简洁、更可预测。

适用场景

  • API 和服务开发

  • 当你的 API 或服务需要明确的错误类型时,Either 让错误在类型系统中可见。不再有"这个函数可能会抛出什么异常"的猜测——TypeScript 编译器会强制你处理所有可能的错误情况。

  • 表单验证

  • 需要收集多个验证错误而不是只返回第一个时,使用 fp-ts 的 Validation 模式可以一次性返回所有字段的问题,提升用户体验。

  • 异步流程编排

  • 当多个异步操作需要串联执行且每一步都可能失败时,TaskEither 的链式调用让控制流清晰明了,自动在第一个错误处停止,无需嵌套的 try/catch。

    核心功能

  • Either 类型安全错误处理

  • Either 要么包含错误(Left),要么包含成功值(Right)。TypeScript 类型系统会强制调用者处理两种情况,不再有被遗忘的 try/catch。支持 map、chain、filterOrElse 等丰富的组合操作。

  • TaskEither 异步错误处理

  • TaskEither 是 Either 的异步版本,完美替代 Promise + try/catch 模式。支持并行执行、重试机制、回退策略等常见异步模式,所有操作都保持类型安全。

  • 错误累积验证

  • 使用 getApplicativeValidation 可以在验证过程中累积所有错误而不是遇到第一个就返回。特别适合表单验证场景,让用户一次性看到所有需要修正的问题。

    常见问题

    fp-ts Either 和 TaskEither 有什么区别?

    Either 用于同步操作,直接包含错误或成功值;TaskEither 用于异步操作,本质上是一个返回 Promise 的函数。TaskEither 拥有与 Either 相同的所有操作符(map、chain、fold 等),只是执行时会返回 Promise。简单来说:同步用 Either,异步用 TaskEither。

    如何用 fp-ts 收集表单验证的所有错误?

    使用 E.getApplicativeValidation 配合 sequenceS。普通的 Either chain 会在第一个错误处停止,但 Validation 模式会继续执行所有验证并收集所有错误。配合 NonEmptyArray 可以确保至少有一个错误,类型更安全。

    为什么要用 Either 替代 try catch?

    传统的异常抛出在类型签名中不可见,函数承诺返回 User 实际上可能抛出三个不同的异常。Either 让错误成为类型的一部分,TypeScript 会强制你处理所有情况。此外,Either 支持函数式组合,可以用 pipe 优雅地串联多个可能失败的操作,代码更清晰,测试也更容易。