schema-dsl 快速上手
如果你第一次使用 schema-dsl,请从本页开始。读完后可以继续看 DSL 语法 理解规则写法,再看 验证指南 进入完整验证流程。
🚀 安装
Node.js 要求:
>=18.0.0当前版本以
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. 链式字段(2分钟)
公开文档默认推荐从 schema-dsl/pure 导入 s。简单字段保留纯 DSL 字符串;需要 .label()、.messages()、.pattern()、.custom() 等链式方法时,用 s('...') 包裹 DSL seed;想要最完整 TypeScript 方法提示时,用 s.xxx() factory。
可用方法:
.pattern(regex)- 正则验证.label(text)- 字段标签.messages(obj)- 自定义消息.description(text)- 描述.custom(fn)- 自定义验证器
4. 完整示例(2分钟)
💡 最佳实践
1. 简单字段用纯DSL
2. 复杂字段用链式 API
3. 80/20 法则
简单字段保持纯 DSL 字符串;需要 label、messages、正则或自定义验证时用 s('...');需要最完整 TypeScript 方法发现时用 s.xxx() factory。
🎯 常见场景
表单验证
自定义验证
.custom()支持同步函数;如果返回Promise,请使用validateAsync()。同步validate()遇到 Promise-returning custom validator 会返回明确错误。
嵌套对象
对象数组
📚 下一步
深入学习
示例代码
其余主题示例现在都已分别挂到各自文档底部,并统一切到稳定 GitHub 示例链接。
高级功能
入口选择
普通业务代码默认使用 schema-dsl/pure。它提供同一套 schema 编写能力,但不会在导入时安装全局 String 方法。
框架、多租户、插件宿主或测试隔离场景使用 schema-dsl/runtime:
如果你确实想写 'email!'.label('邮箱') 这样的直接字符串链式源码,请查看 String 扩展 和编译期 transform;需要零运行时原型修改时优先使用编译期转换。
🆘 常见问题
Q: String扩展和纯DSL有什么区别?
A:
- 纯DSL: 适合简单字段,语法简洁
s('...')链式 API: 适合复杂字段,不依赖全局原型修改s.xxx()factory: 适合需要完整 TypeScript 方法发现的字段- String 扩展: 适合有意启用直接字符串链式写法的项目
Q: 如何显式启用 String 扩展?
A:
测试清理或兼容细节见 String 扩展。
Q: 支持TypeScript吗?
A: 支持!schema-dsl 提供完整的 TypeScript 类型定义。
🎉 恭喜!
你已经掌握了 schema-dsl 的核心用法!
核心要点:
- ✅ DSL语法简洁直观
- ✅
schema-dsl/pure+s是普通业务代码的推荐默认入口 - ✅
s('...')适合显式 DSL 种子 + builder 提示 - ✅
s.xxx()factory 提供最完整的方法发现
开始使用: npm install schema-dsl
对应示例文件
示例入口: quick-start.ts
说明: 覆盖快速上手中的 Hello World、schema-dsl/pure + s 编写路径、用户注册示例,以及 validate() 与 Validator.compile() 的基础复用路径,可直接运行参考。