用途
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 边界校验,特别是需要一次性向用户展示全部错误的场景。
限制
资料未提供安装命令、包版本要求、性能数据或与其他验证库的对比,这些信息暂未提供。