SuperAPI AI 工具集

fp-ts-validation

编程与开发

查看项目

更新于 10-16 02:02

技能介绍

用途

fp-ts-validation 是一个基于 fp-ts 函数式编程库的验证模式技能,用于在 TypeScript 中构建结构化、可组合的验证逻辑。它主要面向三类场景:错误累积、表单验证和 API 输入验证。

主要能力

Either 用于验证

使用 Either<E, A> 表示一个可能以错误 E 失败、或以值 A 成功的计算。资料中给出了基础验证函数签名 type Validation<E, A> = E.Either<E, A>,以及 validateNonEmpty、validateMinLength、validateEmail 等简单验证器示例。

快速失败与错误累积

技能区分两种策略:

  • 快速失败(chain/flatMap):在遇到第一个错误时停止,适用于后续验证依赖前序结果的场景。示例 validateUserFailFast 在 name 为空时只返回 name 错误,不再报告 email 错误。
  • 错误累积:使用 Applicative 配合 Semigroup 收集所有错误。资料中将错误类型定义为 NonEmptyArray<string>,并通过 E.getApplicativeValidation(NEA.getSemigroup<string>()) 获得可累积错误的 applicative。

sequenceT 与 sequenceS

  • sequenceT:以元组方式合并多个验证,累积所有错误。示例 validateUserWithSequenceT 同时验证 name、email、age,并返回全部错误。
  • sequenceS:以结构体/对象方式合并验证,保留字段名。示例 validateUserWithSequenceS 返回带字段名的验证结果。

表单验证

资料提供了完整的表单验证示例,包含自定义错误类型 FieldError(含 field 与 message),以及可复用验证器:required、minLength、maxLength、pattern、email、numeric、inRange。通过 composeValidators 在单个字段内组合验证器(字段内快速失败),再通过 sequenceS 跨字段累积错误。示例 validateRegistration 覆盖用户名、邮箱、密码、年龄以及跨字段的密码匹配验证,并给出将错误转换为按字段索引对象的辅助函数 errorsToRecord,以及用于 React 表单的 getFieldErrors。

API 输入验证

资料展示了请求体验证,包含 API 错误类型 ApiValidationError(code、field、message)与 apiApplicative。常见验证器包括:requiredField、stringField、numberField、arrayField、uuidField、enumField。示例 validateCreateOrder 验证订单请求,涵盖 customerId(UUID)、items 数组(逐项验证 productId 与 quantity,并累积所有元素错误)、shippingAddress 嵌套对象(street、city、postalCode、country)以及 paymentMethod 枚举值。

使用方式

资料以代码示例形式展示用法,未提供安装命令或包版本要求。使用前需引入 fp-ts 相关模块,如 fp-ts/Either、fp-ts/Apply、fp-ts/NonEmptyArray、fp-ts/function。

适用场景

适用于 TypeScript 项目中需要结构化、可组合验证逻辑的场景,尤其是表单校验和 API 边界校验,特别是需要一次性向用户展示全部错误的场景。

限制

资料未提供安装命令、包版本要求、性能数据或与其他验证库的对比,这些信息暂未提供。