I looked in the class-validators samples and docs but cant find the validation I need.
I have an array of object literals each with specific properties and values.
const comboItems = [{itemType: 'Entree'}, {itemType: 'Side'}, {itemType: 'Beverage'}];
I want to validate that comboItems is not empty and contains a min and max of 3 objects AND that there is an itemType === 'Entree' AND an itemType==='Side' AND an itemType==='Beverage'
This is the class I've created which isnt giving the correct validation:
import {validate, ArrayContains, ArrayNotEmpty, ArrayMinSize, ArrayMaxSize} from 'class-validator';
import { plainToClass } from 'class-transformer';
export class MealMenuItem {
@ArrayContains([{itemType: 'Entree'}, {itemType: 'Side'}, {itemType: 'Beverage'}])
@ArrayNotEmpty()
@ArrayMinSize(3)
@ArrayMaxSize(3)
comboItems: any[];
}
const mealMenuItemData: any = {comboItems: [{itemType: 'Entree'}, {itemType: 'Side'}, {itemType: 'Beverage'}]};
const mealMenuItemDataClassInstance = plainToClass(MealMenuItem, mealMenuItemData as MealMenuItem)
validate(mealMenuItemDataClassInstance).then(errors => {
if (errors.length > 0)
console.log('validation failed. errors: ', JSON.stringify(errors));
else
console.log('validation succeed');
});
Thanks for any help!
const mealMenuItemData: any = {comboItems: [{itemType: 'Entree', itemType: 'Side', itemType: 'Beverage'}]};you should change it as:const mealMenuItemData: any = {comboItems: [{itemType: 'Entree'}, {itemType: 'Side'}, {itemType: 'Beverage'}]};