如何从TypeScript Interface程序化生成Yup Schema?
TypeScript Interface 转 Yup Schema 的程序化方案
当然有现成工具可以实现自动转换,不用手动编写Schema:
1. typescript-to-yup 库(最常用)
这是专门做TS类型到Yup Schema转换的工具,支持大部分常见TS类型,包括可选属性、嵌套接口、联合类型等。
步骤:
- 安装依赖:
npm install typescript-to-yup --save-dev - 定义你的TS接口:
interface User { name: string; age: number; email?: string; address: { street: string; city: string; }; } - 生成Schema:
import { generateSchema } from 'typescript-to-yup'; // 可以添加自定义验证规则,比如给age设置最小值 const userSchema = generateSchema<User>({ age: { min: { value: 18, message: '年龄不能小于18岁' } } }); - 验证使用:
const testUser = { name: '张三', age: 22, address: { street: '朝阳路', city: '北京' } }; userSchema.validate(testUser) .then(() => console.log('验证通过')) .catch(err => console.error('验证失败:', err.errors));
注意:
- 泛型、交叉类型这类复杂TS语法,工具的支持有限,可能需要手动补充规则;
- 自定义配置可以覆盖默认的转换逻辑,满足特定字段的验证需求。
2. 基于TS Compiler API 自定义脚本
如果需要完全定制化的转换逻辑,可以直接用TypeScript的Compiler API解析接口的AST,然后生成对应的Yup代码。这种方式灵活性拉满,但需要自己写解析逻辑,适合有特殊需求的场景。
大致思路:
- 用
typescript包的API读取TS文件,解析出接口的属性和类型信息; - 把每个属性的TS类型映射成对应的Yup方法(比如
string类型对应yup.string()); - 将生成的Schema代码输出为文件,直接在项目中引用。
最后提醒
不管用哪种工具,转换后都要测试下生成的Schema是否符合预期,尤其是涉及复杂类型的场景;另外,部分工具对最新TS语法的支持可能有延迟,选版本时注意兼容性。
内容的提问来源于stack exchange,提问作者Kostya Tresko
相关产品推荐
相关产品推荐

