import { registerDecorator, ValidationOptions, ValidationArguments, } from 'class-validator'; export function HasTruthyWith( property: string, validationOptions?: ValidationOptions, ) { // eslint-disable-next-line @typescript-eslint/ban-types return function (object: Object, propertyName: string) { registerDecorator({ name: 'hasTruthyWith', target: object.constructor, propertyName: propertyName, constraints: [property], options: validationOptions, validator: { validate(value: any, args: ValidationArguments) { const [relatedPropertyName] = args.constraints; const relatedValue = (args.object as any)[relatedPropertyName]; return ( typeof value === 'boolean' && typeof relatedValue === 'boolean' && (value || relatedValue) ); // you can return a Promise here as well, if you want to make async validation }, }, }); }; }