fp-ts-errors
在 TypeScript 中掌握 fp-ts 错误处理
不再与 try/catch 混乱代码搏斗。学习使用 fp-ts 的 Either 和 TaskEither 将错误作为类型安全的值来处理,实现可预测、可组合的错误处理。
تنزيل ZIP المهارة
رفع في Claude
اذهب إلى Settings → Capabilities → Skills → Upload skill
فعّل وابدأ الاستخدام
اختبرها
استخدام "fp-ts-errors". 验证一个包含无效 email、密码过短和缺少 age 的用户注册表单
النتيجة المتوقعة:
Left(['无效的 email 格式', '密码必须至少 8 个字符', 'age 是必填项']) - 三个验证错误一起返回,而不是在第一个错误处就失败
استخدام "fp-ts-errors". 链式调用 getUser(userId)、getProduct(productId) 和 createOrder(user, product),其中 getUser 返回 Left('未找到用户')
النتيجة المتوقعة:
Left('未找到用户') - 链条在第一个失败处停止,后续操作永远不会执行,错误被干净地传播
استخدام "fp-ts-errors". 使用 TaskEither 获取用户数据,网络请求因连接错误失败
النتيجة المتوقعة:
Left({ code: 'NETWORK', message: '无法连接到服务器' }) - 结构化错误包含用于程序化处理的错误代码和用于显示的人类可读消息
التدقيق الأمني
آمنThis skill is educational documentation teaching fp-ts error handling patterns in TypeScript. The static analyzer produced 127 false positives by misidentifying Markdown code block backticks as shell commands. All network references are code examples demonstrating TaskEither usage, not executable code. No actual command execution, network calls, or system access exists in this skill.
درجة الجودة
ماذا يمكنك بناءه
带有错误累积的表单验证
验证用户输入表单时一次性收集所有验证错误,而不是在第一个错误处停止。
API 错误处理流水线
构建强大的 API 层,通过类型化的错误结果处理网络错误、HTTP 状态码和 JSON 解析失败。
数据库操作链
链接多个数据库操作,任何失败都返回结构化错误而不是抛出异常。
جرّب هذه الموجهات
帮我使用 fp-ts Either 将函数转换为不抛出错误的形式:[粘贴函数]。展示如何用 fold 处理错误情况。
我需要链接这三个操作:getUser、validatePermissions 和 createResource。每个操作都可能以不同的错误类型失败。展示如何用 chainW 将它们与 fp-ts Either 结合起来。
使用 fp-ts 创建一个表单验证器来验证 email、password 和 age 字段。使用验证 applicative 一次性收集所有错误,而不是只收集第一个错误。
展示如何用 TaskEither 包装这个 fetch 调用并添加带有指数退避的重试逻辑。使用结构化错误类型处理网络错误和非 200 HTTP 响应。
أفضل الممارسات
- 在边界处包装抛出异常的代码(外部 API、文件 I/O、JSON 解析),并在内部返回 Either
- 使用描述性错误类型(联合类型或接口)而不是纯字符串以获得更好的类型安全
- 对异步操作应用 TaskEither 以保持惰性求值并避免过早执行
تجنب
- 在链式调用中过早调用 fold - 在末尾处理错误,而不是在每一步之后
- 将 Either 与抛出的异常混合使用 - 始终如一地采用一种错误处理策略
- 将 Left 用于预期的控制流比如 'not found' - 仅将错误保留给真正的异常情况