To validate deep properties, use the fields property within an object or array type rule.
Object Validation:
Assign nested rules to a fields property. If the parent rule is not marked required, deep validation only runs if the field exists on the source.
Array Validation:
- Use
fields to validate specific indices (e.g., 0, 1, 2). - Use
defaultField to apply the same rule to every element in the array.
Example (Deep Object):
const descriptor = {
address: {
type: 'object',
required: true,
fields: {
street: { type: 'string', required: true },
city: { type: 'string', required: true },
zip: { type: 'string', required: true, len: 8, message: 'invalid zip' },
},
},
name: { type: 'string', required: true },
};
const validator = new Schema(descriptor);
validator.validate({ address: { street: 'Main St', city: 'NY', zip: '12345678' }, name: 'John' });