ค้นหาเว็บไซต์

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",...}