Schema 工具函数文档
当多个 schema 需要复用字段,或你想从一个 schema 派生出另一个 schema 时,可以使用 SchemaUtils。本页先讲常见复用方式,再介绍适合大型项目的辅助 API。
Schema 复用
直接复用(最简单)✅
优点: 最简单,直接使用 JavaScript 对象展开
函数复用(需要参数时)
优点: 支持参数化,灵活性强
字段库复用(大型项目)
优点: 统一管理,易于维护
Schema 合并
createLibrary() - 创建片段库
说明: createLibrary() 只是返回片段工厂集合,适合在大型项目中集中管理字段和组合片段。
extend() - 扩展Schema(继承)
说明: 类似继承,保留基础Schema的所有字段
Schema 筛选
pick() - 选择字段
用途: 从完整Schema中提取部分字段(如公开信息)
omit() - 排除字段
用途: 移除敏感字段(如密码)
partial() - 将字段改为可选
也可以只对部分字段做可选化,同时保留 schema 中的其他字段:
partialContact 仍然包含 age;只有 name 和 email 会从顶层 required 列表中移除。如果你需要只保留这些字段,可以组合 SchemaUtils.pick(schema, fields).partial()。
pick() 和 omit() 还会同步投影对象层级的 allOf、dependencies、dependentRequired 与 dependentSchemas 约束,避免被移除字段通过组合分支继续生效。无法安全保留语义时会明确拒绝投影:对象层级存在 $ref,或 anyOf / oneOf / if / then / else / not 分支仍引用被移除字段时,方法会抛出错误,而不是返回约束变弱的 schema。
Schema 导出
toMarkdown() - 导出为Markdown文档
输出:
SchemaUtils.toMarkdown() 是轻量工具,表头固定为英文;如需多语言字段表、示例数据和完整导出选项,优先使用 MarkdownExporter。
用途: 生成API文档
toHTML() - 导出为HTML表格
用途: 集成到Web文档
性能监控
validateBatch() - 批量验证统计
说明:
- 如果你只需要“每条是否通过”的结果,可直接使用
validator.validateBatch(schema, items) - 如果你还需要汇总统计信息,再使用
SchemaUtils.validateBatch(schema, items, validator.getAjv())
withPerformance() - 给 Validator 添加性能包装
用途: 在不改业务调用方式的前提下,为验证结果附加耗时信息
其他工具
clone() - 深度克隆Schema
validateNestingDepth() - 检查嵌套深度
说明: 这个能力属于 DslBuilder 静态方法,不是 SchemaUtils 的成员;这里一并列出是因为它常与 Schema 工具链一起使用。
完整示例
企业级字段库
最佳实践
1. 小项目:直接复用
2. 中型项目:函数复用
3. 大型项目:字段库
相关文档
对应示例文件
示例入口: schema-utils.ts
说明: 覆盖 reusable()、createLibrary()、extend()、validateBatch()、withPerformance() 和 clone() 的最小工作流。