是否可对myMaps下任意名称的嵌套对象统一应用schema校验?
可以实现,主流Schema校验工具均支持对键名不固定的对象属性配置统一校验规则,以下是不同常用工具的实现示例:
1. 通用JSON Schema方案
使用patternProperties匹配所有任意命名的键,匹配成功的属性统一应用指定Schema:
{ "type": "object", "properties": { "myMaps": { "type": "object", "patternProperties": { "^.*$": { "type": "object", "properties": { "requiredFieldA": { "type": "number" }, "requiredFieldB": { "type": "string" } }, "required": ["requiredFieldA", "requiredFieldB"] } }, "additionalProperties": false } } }
如果不需要限制键名格式,也可以直接用additionalProperties指定所有额外属性的校验规则,效果一致。
2. Zod 实现(TypeScript/前端场景常用)
直接使用内置的z.record()方法定义键名任意、值符合指定Schema的对象类型:
import { z } from 'zod' const mapItemSchema = z.object({ requiredFieldA: z.number(), requiredFieldB: z.string() }) const configSchema = z.object({ myMaps: z.record(mapItemSchema) })
3. Joi 实现
使用pattern()方法匹配所有键,绑定对应值的校验规则:
const Joi = require('joi') const mapItemSchema = Joi.object({ requiredFieldA: Joi.number().required(), requiredFieldB: Joi.string().required() }) const configSchema = Joi.object({ myMaps: Joi.object().pattern(/^/, mapItemSchema) })
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

