schema-dsl 快速上手
阅读时间: 5分钟
目标: 快速掌握 schema-dsl 核心用法
📑 目录
入门指南
进阶功能
🚀 安装
Node.js 要求:
>=18.0.0当前 TypeScript 重构版以
Node.js >=18.0.0为唯一运行时基线,不再承诺旧 Node 版本兼容。
📖 5分钟快速入门
1. Hello World(30秒)
解释:
'string:1-50!'- 必填字符串,长度1-50'email!'- 必填邮箱!表示必填
2. DSL 语法速查(1分钟)
语法规则:
type:max→ 最大值(简写)type:min-max→ 范围type:min-→ 只限最小type:-max→ 只限最大
3. String 扩展(2分钟)
字符串支持链式调用:
可用方法:
.pattern(regex)- 正则验证.label(text)- 字段标签.messages(obj)- 自定义消息.description(text)- 描述.custom(fn)- 自定义验证器
4. 完整示例(2分钟)
💡 最佳实践
1. 简单字段用纯DSL
2. 复杂字段用String扩展
3. 80/20 法则
80%字段用纯DSL,20%字段用String扩展
🎯 常见场景
表单验证
自定义验证
.custom()当前仅支持同步函数;如果需要异步查重,请在validate()/validateAsync()通过后于业务层单独执行。
嵌套对象
📚 下一步
深入学习
示例代码
其余主题示例现在都已分别挂到各自文档底部,并统一切到稳定 GitHub 示例链接。
高级功能
🎯 设计理念与性能
为什么选择运行时解析?
Schema-DSL 使用运行时解析 DSL,而非编译时构建(如 Zod),这是有意的设计选择:
✅ 运行时解析的优势
-
完全动态 - 验证规则可以从配置文件、数据库动态加载
-
多租户支持 - 每个租户可以有不同的验证规则
-
可序列化 - DSL 字符串可以存储、传输、共享
-
低代码基础 - 支持可视化表单构建器
⚠️ 性能权衡
S1 有效数据与 Zod 持平,S3 嵌套场景快约 28%,无效数据公平对比快 89x:
结论:
- ✅ S3 嵌套有效场景比 Zod 快 28%;S1 简单有效场景持平(差 <1%)
- ✅ 无效数据公平对比(均无 i18n)比 Zod 快 89x
- ✅ 内置缓存,热路径零解析开销
适用场景
✅ 选择 Schema-DSL:
- 需要动态验证规则(配置驱动、多租户)
- 需要数据库 Schema 导出
- 快速开发原型
- 多语言 SaaS 系统
⚠️ 考虑其他库:
- TypeScript 项目需要强类型推断 → Zod
- 性能是第一优先级 → Ajv 或 Zod
- 静态验证规则 → Zod
🆘 常见问题
Q: String扩展和纯DSL有什么区别?
A:
- 纯DSL: 适合简单字段,语法简洁
- String扩展: 适合复杂验证,支持链式调用
Q: 如何禁用String扩展?
A:
Q: 支持TypeScript吗?
A: 支持!schema-dsl 提供完整的 TypeScript 类型定义。
🎉 恭喜!
你已经掌握了 schema-dsl 的核心用法!
核心要点:
- ✅ DSL语法简洁直观
- ✅ String扩展强大灵活
- ✅ 80%用DSL,20%用扩展
- ✅ 字符串可以直接链式调用
开始使用: npm install schema-dsl
对应示例文件
示例入口: quick-start.ts
说明: 覆盖快速上手中的 Hello World、String 扩展、用户注册示例,以及 validate() 与 Validator.compile() 的基础复用路径,可直接运行参考。
最后更新: 2026-05-08