使该字段成为可选的,但如果设置的话,让它依赖于其他字段。

问题描述 投票:2回答:1

我有一个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'])

所以这三个字段都是可选的,但如果提供了其中一个字段,其他两个字段也必须提供。

class-validator
1个回答
1
投票

我想你需要添加 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.