You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:54:22