Node.js用Yup验证无固定键名扁平字典对象的Schema写法
Yup 无固定键名扁平字典对象验证实现
针对你需要验证「键、值均为字符串、无预定义固定键名的扁平字典对象」的需求,可以直接通过Yup的对象Schema搭配自定义校验规则实现,不需要提前枚举所有可能的键名,也不需要依赖额外的JS逻辑生成固定键配置。
可直接使用的Schema定义
import * as yup from 'yup'; // 多语言标签字典专用Schema:同时约束键、值均为字符串类型 const labelsDictSchema = yup.object() // 校验所有值为字符串类型 .test('value-type-check', '字典内所有值必须为字符串', (targetObj) => { if (!targetObj) return true; // 空值交给required规则判断,这里不做拦截 return Object.values(targetObj).every(val => typeof val === 'string'); }) // 校验所有键为字符串类型 .test('key-type-check', '字典内所有键必须为字符串', (targetObj) => { if (!targetObj) return true; return Object.keys(targetObj).every(key => typeof key === 'string'); }); // 如果是嵌套在整个表单结构里,可以直接组合使用 const wholeFormSchema = yup.object({ labels: labelsDictSchema.required('标签字段不能为空') });
使用说明
- 该Schema完全适配你给出的
labels: { 'EN-US': 'foo bar', 'EN-BR': 'foo baz' }数据结构,不需要提前声明EN-US、EN-BR这类固定键,支持任意数量的动态键名。 - 如果后续需要追加键的格式约束(比如限制键必须为
语言-地区格式的语言代码),只需要新增对应的test校验项,在遍历键的逻辑里加正则判断即可。 - 校验调用逻辑和普通Yup规则完全一致,直接调用
wholeFormSchema.validate(你的表单数据)即可拿到校验结果。
内容的提问来源于stack exchange,提问作者mercury
相关产品推荐
相关产品推荐

