dataHandler
package version >0.0.0
shadcn any version
author: cmtlyt
update time: 2026/04/01 16:07:21
dataHandler 是一个强大的数据验证和转换工具,提供类型安全的数据处理能力。支持灵活的验证规则、类型转换、错误处理和默认值设置,适用于表单验证、配置管理、API 响应处理等场景。
特性
- 类型安全:完整的 TypeScript 类型支持和推断
- 灵活验证:支持多种内置类型检查和自定义验证
- 自动转换:支持类型转换和默认值设置
- 错误处理:提供详细的错误信息和自定义错误处理
- 简洁 API:提供
$t、$dt等便捷工具函数 - 两种模式:支持包装模式和直接返回模式
install
npm
shadcn
usage
基础用法
简单验证
使用 $t 类型检查器
使用 $dt 定义转换器
使用字符串引用类型检查器
$dt 支持使用字符串直接引用 $t 的类型检查器,提供更简洁的语法:
支持的字符串类型
混合使用字符串和函数
函数式处理器
高级用法
错误处理
自定义错误处理
严格模式
默认值
Unwrap 模式
类型检查器
$t 类型检查器
$t 提供了一系列内置的类型检查器:
$t.notNullable()
检查值不为 null 或 undefined。
$t.string()
检查值是否为字符串。
$t.validString()
检查值是否为非空字符串。
$t.number()
检查值是否为数字。
$t.validNumber()
检查值是否为有效数字(非 NaN)。
$t.boolean()
检查值是否为布尔值。
$t.object()
检查值是否为对象。
$t.array()
检查值是否为数组。
$t.function()
检查值是否为函数。
$t.symbol()
检查值是否为 Symbol。
$t.enum()
检查值是否在枚举列表中。
自定义类型检查器
使用场景
表单验证
API 响应处理
配置验证
复杂验证逻辑
API
dataHandler(data, handler, options?)
处理数据验证和转换。
参数
- data:
M & Partial<O['defaultValue']>- 要处理的数据
- handler:
Handler<M>- 处理器,可以是对象或函数
- 对象形式:每个字段对应一个处理函数
- 函数形式:统一处理所有字段
- options?:
DataHandlerOptions<M>- strict?:
boolean- 是否启用严格模式,默认为
false - 启用后验证失败会抛出错误
- 是否启用严格模式,默认为
- errorHandler?:
(errors: string[]) => void- 自定义错误处理函数
- defaultValue?:
M- 默认值,验证失败的字段会使用默认值
- unwrap?:
boolean- 是否直接返回结果,默认为
false - 启用后直接返回处理后的数据,不包装在对象中
- 是否直接返回结果,默认为
- strict?:
返回值
- 返回值:
MergeResult<M & O['defaultValue'], Transform2Type<H>>|{ result: MergeResult<M & O['defaultValue'], Transform2Type<H>>; errors: string[] }- 当
unwrap为true时,直接返回处理后的数据 - 当
unwrap为false时,返回包含result和errors的对象
- 当
defineTransform(dataInfo)
定义数据转换器。
参数
- dataInfo:
D- 转换器定义对象,键为字段名,值为类型检查器或处理函数
返回值
- 返回值:
DataTransformResult<D>- 转换器对象,可用于
dataHandler
- 转换器对象,可用于
$t
类型检查器集合,提供各种内置类型检查器。
$dt
defineTransform 的别名,用于定义数据转换器。
最佳实践
1. 使用 $dt 定义验证规则
2. 提供合理的默认值
3. 使用严格模式处理关键数据
4. 自定义错误处理
5. 复用验证规则
注意事项
- 类型安全:TypeScript 类型在运行时不会进行验证,需要开发者确保类型正确
- 错误处理:默认模式下验证失败不会抛出错误,需要检查
errors数组 - 严格模式:严格模式下验证失败会抛出错误,适合关键数据处理
- 默认值:默认值只在验证失败时使用,不会覆盖有效数据
- 转换顺序:转换只在验证通过后应用,验证失败的字段不会应用转换
- 函数式处理器:函数式处理器会处理所有字段,需要根据 key 进行区分
- 性能考虑:对于大量数据,建议使用对象形式的处理器以提高性能
- 类型推断:TypeScript 会根据验证规则自动推断返回值的类型