сделать поле необязательным, но пусть оно зависит от других полей, если установлено - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть места фильтрации DTO. Для запроса только некоторых мест я могу указать широту, долготу и радиус. Все три из них являются необязательными полями, но когда я устанавливаю одно из них, оно требует и двух других. Итак, что я имею до сих пор

export class GetLocationsDTO {
    @IsNumber()
    @IsLatitude()
    // optional but requires longitude and radius
    @Type(() => Number)
    public latitude?: number;

    @IsNumber()
    @IsLongitude()
    // optional but requires latitude and radius
    @Type(() => Number)
    public longitude?: number;

    @IsNumber()
    // optional but requires latitude and longitude
    @Type(() => Number)
    public radiusInKilometers?: number;
}

Есть ли декоратор, подобный этому образцу

@IsOptionalButDependsOn(['fieldFoo', 'fieldBar'])

Так что все три из них являются необязательными, но если один из них был при условии, что должны быть предоставлены и другие два поля.

1 Ответ

1 голос
/ 24 апреля 2020

Я думаю, вам нужно добавить ValidateIf.

export class GetLocationsDTO {
    @IsNumber()
    @IsLatitude()
    @ValidateIf(o => o.radiusInKilometers !== undefined || o.longitude !== undefined)
    @Type(() => Number)
    public latitude?: number;

    @IsNumber()
    @IsLongitude()
    @ValidateIf(o => o.latitude !== undefined || o.radiusInKilometers !== undefined)
    @Type(() => Number)
    public longitude?: number;

    @IsNumber()
    @ValidateIf(o => o.latitude !== undefined || o.longitude !== undefined)
    @Type(() => Number)
    public radiusInKilometers?: number;
}
...