☰
【研发类-编程语言Skills】fp-either-ref 技能
2026/11/1 1:56:17 网站建设 项目流程

Quick reference for Either type. Use when user needs error handling, validation, or operations that can fail with typed errors.

技能概述

fp-either-ref 技能是一个Either类型的快速参考卡片,提供简洁的API参考和常用模式。Either表示成功或失败,Right(value)表示成功,Left(error)表示失败。该技能为需要类型化同步错误处理的场景提供快速参考,包括验证、可能失败的操作、以及将抛出异常的代码转换为Either。适用于需要快速查阅Either操作符和模式的开发者。

下载地址:agentic-awesome-skills/skills/fp-either-ref at main · sickn33/agentic-awesome-skills · GitHub

核心概念

Either = 成功或失败。Right(value)或Left(error)。

主要功能

  • 创建Either值: right、left、fromNullable、tryCatch
  • 转换操作: map、mapLeft、flatMap、filterOrElse
  • 提取值: getOrElse、match、toUnion
  • 验证模式: 链式验证,在第一个错误时停止
  • 异常转换: 将try/catch代码转换为Either

触发条件

在以下情况下应该调用此技能:

  • 需要类型化同步错误处理的fp-ts快速参考时
  • 任务涉及验证、可能失败的操作或将抛出异常的代码转换为Either时
  • 想要紧凑的速查表而非长篇教程时

创建Either

import * as E from 'fp-ts/Either'

E.right(value) // 成功
E.left(error) // 失败
E.fromNullable(err)(x) // null → Left(err), else Right(x)
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如果pred失败

提取值

E.getOrElse(err => default) // 获取Right或默认值
E.match(onLeft, onRight) // 模式匹配
E.toUnion(either) // E | A (丢失类型信息)

常用模式

验证

使用Either进行验证,链式调用在第一个错误时停止:

import { pipe } from 'fp-ts/function'
import * as E from 'fp-ts/Either'

const validateEmail = (s: string): E.Either<string, string> =>
s.includes('@') ? E.right(s) : E.left('Invalid email')

// 链式验证(在第一个错误时停止)
pipe(
E.right({ email: 'test@example.com', age: 25 }),
E.flatMap(d =>
pipe(
validateEmail(d.email),
E.map(() => d)
)
),
E.flatMap(d =>
d.age >= 18 ? E.right(d) : E.left('Must be 18+')
)
)

转换抛出异常的代码

将try/catch代码转换为Either:

const parseJson = (s: string) =>
E.tryCatch(
() => JSON.parse(s),
(e) => `Parse error: ${e}`
)

Either vs try/catch

try/catch的问题

错误不在类型中,容易忘记处理,难以组合。

Either的优势

错误在类型中显式声明,强制处理错误情况,易于链式组合。

最佳实践

  1. 使用Either当错误类型重要时: 需要区分不同类型的错误
  2. 链式操作: 使用flatMap组合多个可能失败的操作
  3. 提供有意义的错误信息: 错误应该包含足够的上下文
  4. 在边界处转换: 将抛出异常的第三方库包装为Either
  5. 使用具体的错误类型: 避免使用string或Error,定义具体的错误类型

限制说明

重要限制:

  • 仅在任务明确匹配所述范围时使用此技能
  • 不要将输出替代环境特定的验证、测试或专家审查
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询