使字段可选,但如果设置则让它依赖于其他字段
make field optional but let it depend on other fields if set
我有一个 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;
}
我有一个 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;
}