用途
fp-either-ref 是一个针对 fp-ts 中 Either 类型的快速参考(cheat sheet)技能,面向需要类型化同步错误处理的场景。当任务涉及校验、可能失败的操作,或需要把抛出异常的代码转换为 Either 时,可以用它快速查阅函数用法和常见模式,而不必通读长篇教程。
主要能力
该参考围绕 Either = 成功或失败 这一核心概念展开:Right(value) 表示成功,Left(error) 表示失败。资料按用途分组列出了相关函数:
- 创建:E.right(value)、E.left(error)、E.fromNullable(err)(x)(null 转 Left,否则 Right)、E.tryCatch(fn, toError)(try/catch 转 Either)。
- 转换:E.map(fn) 转换 Right 值、E.mapLeft(fn) 转换 Left 错误、E.flatMap(fn) 进行链式调用(fn 返回 Either)、E.filterOrElse(pred, toErr) 在判定失败时把 Right 转 Left。
- 提取:E.getOrElse(err => fallbackValue) 取 Right 或默认值、E.match(onLeft, onRight) 模式匹配、E.toUnion(either) 合并为 E | A(会丢失类型信息)。
使用方式
资料给出的典型模式是在 pipe 中组合多个操作,例如先做一个玩具级校验(检查字符串是否包含 @,并明确说明这并非完整的邮箱校验),再通过 E.flatMap 串联校验步骤,一旦出现错误就停止。另一个模式是用 E.tryCatch 把 JSON.parse 这类可能抛异常的调用转换为 Either,并通过 E.match 处理错误分支与成功分支。资料还对比了传统 try/catch 与 Either 的差异,指出 Either 的错误会显式体现在类型中,并且可以链式组合操作。
适用场景
当错误类型很重要、并且需要把多个可能失败的操作串联起来时,适合使用 Either。资料明确其范围为 fp-ts 2.x 的代码片段,使用时需要自行提供应用变量、类型、校验器和导入,并检查所安装的版本。
限制
资料列出了若干限制:仅在任务清晰匹配上述范围时使用该技能;不应把输出当作特定环境验证、测试或专家审查的替代品;若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。此外,map 不会捕获抛出的异常;Task 没有类型化错误通道,包装不当的 Promise 仍可能 reject,因此应在可能失败的边界使用 tryCatch。官方 API 参考指向 fp-ts 模块。