javascript - class-transformer @Type กับหลาย subTypes ที่มีคลาสเดียวกันสำหรับประเภทที่แตกต่างกัน
อยู่กับฉันนะ มันกำลังจะสับสน
- ฉันกำลังใช้ NestJs กับ class-validator/transformer
- มีอาร์เรย์ที่สามารถประกอบด้วย 2 ประเภท
- ฉันใช้ @Type เพื่อกำหนด ite ผ่านตัวแยกแยะ
- ฉันใช้ Transform เพราะมันจำเป็นในการทำ Serialization มิฉะนั้นมันจะสร้างวัตถุว่าง
ตอนนี้ปัญหาคือ ตัวแยกของฉันเป็นอีนัมขนาด 7 ตัว มี 6 ตัวชี้ไปยังคลาสหนึ่ง และตัวสุดท้ายไปยังอีกคลาสหนึ่ง ปัญหาคือ ด้วยเหตุผลบางประการไม่ว่าประเภทอีนัมจะเป็นอะไร มันมักจะถูกเปลี่ยนไปยัง subType แรกเสมอเมื่อทำการ Serialized
enum DiscrType = {A: "a", B: "b", C: "c"}
class Discriminator {
@IsEnum(DiscrType)
type: DiscrType
}
class ClassONE extends Discriminator {...}
class ClassTWO extends Discriminator {...}
class Stuff {
@Type(() => Discriminator, {
discriminator: {
property: 'type',
subTypes: [
{ value: ClassTWO, name: DiscrType.C},
{ value: ClassONE, name: DiscrType.A}, // Always turns into this value even if it was B
{ value: ClassONE, name: DiscrType.B},
],
},
keepDiscriminatorProperty: true,
})
@Transform(
({ value }) =>
value?.map((object: ClassONE | ClassTWO ) =>
object.type === DiscrType.C
? plainToClass(classTWO, object)
: plainToClass(ClassONE, object),
),
)
@ValidateNested({each: true})
property: (ClassONE | ClassTWO )[]
}
พฤติกรรม :
new Stuff({type: DiscrType.B,...}) // Serialization with Class Serializer
// Expected:
x = {type: "b",...}
// Actual:
x = {type: "a",...}