【问题标题】:make field optional but let it depend on other fields if set使字段可选,但如果设置则让它依赖于其他字段
【发布时间】:2020-08-07 08:24:04
【问题描述】:

我有一个 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】:

    我猜你需要添加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;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-18
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2012-04-14
      相关资源
      最近更新 更多