المهارات fp-ts-errors
📦

fp-ts-errors

آمن

在 TypeScript 中掌握 fp-ts 错误处理

不再与 try/catch 混乱代码搏斗。学习使用 fp-ts 的 Either 和 TaskEither 将错误作为类型安全的值来处理,实现可预测、可组合的错误处理。

يدعم: Claude Codex Code(CC)
🥉 74 برونزي
1

تنزيل ZIP المهارة

2

رفع في Claude

اذهب إلى Settings → Capabilities → Skills → Upload skill

3

فعّل وابدأ الاستخدام

اختبرها

استخدام "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: '无法连接到服务器' }) - 结构化错误包含用于程序化处理的错误代码和用于显示的人类可读消息

التدقيق الأمني

آمن
v1 • 2/25/2026

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.

1
الملفات التي تم فحصها
857
الأسطر التي تم تحليلها
0
النتائج
1
إجمالي عمليات التدقيق
لا توجد مشكلات أمنية
تم تدقيقه بواسطة: claude

درجة الجودة

38
الهندسة المعمارية
100
قابلية الصيانة
87
المحتوى
50
المجتمع
100
الأمان
91
الامتثال للمواصفات

ماذا يمكنك بناءه

带有错误累积的表单验证

验证用户输入表单时一次性收集所有验证错误,而不是在第一个错误处停止。

API 错误处理流水线

构建强大的 API 层,通过类型化的错误结果处理网络错误、HTTP 状态码和 JSON 解析失败。

数据库操作链

链接多个数据库操作,任何失败都返回结构化错误而不是抛出异常。

جرّب هذه الموجهات

基础 Either 模式
帮我使用 fp-ts Either 将函数转换为不抛出错误的形式:[粘贴函数]。展示如何用 fold 处理错误情况。
链接多个操作
我需要链接这三个操作:getUser、validatePermissions 和 createResource。每个操作都可能以不同的错误类型失败。展示如何用 chainW 将它们与 fp-ts Either 结合起来。
收集所有错误的表单验证
使用 fp-ts 创建一个表单验证器来验证 email、password 和 age 字段。使用验证 applicative 一次性收集所有错误,而不是只收集第一个错误。
使用 TaskEither 的异步重试
展示如何用 TaskEither 包装这个 fetch 调用并添加带有指数退避的重试逻辑。使用结构化错误类型处理网络错误和非 200 HTTP 响应。

أفضل الممارسات

  • 在边界处包装抛出异常的代码(外部 API、文件 I/O、JSON 解析),并在内部返回 Either
  • 使用描述性错误类型(联合类型或接口)而不是纯字符串以获得更好的类型安全
  • 对异步操作应用 TaskEither 以保持惰性求值并避免过早执行

تجنب

  • 在链式调用中过早调用 fold - 在末尾处理错误,而不是在每一步之后
  • 将 Either 与抛出的异常混合使用 - 始终如一地采用一种错误处理策略
  • 将 Left 用于预期的控制流比如 'not found' - 仅将错误保留给真正的异常情况

الأسئلة المتكررة

何时应该使用 Either 与 TaskEither?
对于可能失败的同步操作使用 Either。对于可能失败的异步操作(Promises)使用 TaskEither。TaskEither 是惰性的,返回一个产生 Promise<Either<E, A>> 的函数。
如何将现有的 try/catch 代码转换为 fp-ts?
对于同步代码使用 E.tryCatch 包装抛出异常的代码,对于异步代码使用 TE.tryCatch。提供一个 onError 函数将捕获的异常转换为你的错误类型。
chain 和 chainW 有什么区别?
chain 要求两个 Either 类型具有相同的错误类型。chainW(wider)自动联合不同的错误类型,在链接具有不同错误类型的操作时很有用。
如何从 Either 中获取值?
使用 fold 显式处理两种情况,使用 getOrElse 为 Left 提供默认值,或者仅在确定是 Right 时使用 unsafeGetRight。避免在生产代码中使用 unsafeGetRight。
能否将 fp-ts 与现有的基于 Promise 的代码一起使用?
可以。使用 TE.tryCatch 包装 Promises,并在需要时通过 toPromise 或执行 TaskEither 函数将其转换回 Promise,以便与外部 API 集成。
如何收集多个验证错误而不是快速失败?
使用 sequenceS 配合 getApplicativeValidation 和错误类型的 Semigroup。这会组合所有验证并使用 Semigroup 的 concat 操作累积错误。

تفاصيل المطور

المؤلف

sickn33

الترخيص

MIT

مرجع

main

بنية الملفات

📄 SKILL.md