我有一个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'])
所以这三个字段都是可选的,但如果提供了其中一个字段,其他两个字段也必须提供。
我想你需要添加 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;
}