Вы можете сделать это, но вам потребуются некоторые изменения:
LocationId
и LocationCoordinates
должны быть классами - Вы должны добавить декоратор
@Type
к входное свойство. Это позволяет class-transformer
обрабатывать десериализацию на основе заданного c параметра дискриминатора
class LocationRadius {
@Type(() => Object, {
keepDiscriminatorProperty: true,
discriminator: {
property: "type",
subTypes: [
{ value: LocationCoordinates, name: "coordinate" },
{ value: LocationId, name: "id" }
]
}
})
data: LocationCoordinates | LocationId
searchRadiusInKm: number
}
Вы должны добавить свойство
type
к вашему входу, чтобы позволить даже TS различать объединение:
// raw input for LocationCoordinates
const rawLocationCoordinates = {
data: {
type: "coordinate",
longitude: 22,
latitude: 33
},
searchRadiusInKm: 30
}
Вы можете увидеть результат в этом StackBlitz Проект Я настроил