Ikut saya, ia mungkin menjadi sedikit mengelirukan:
Sekarang masalahnya ialah pendiskriminasi saya ialah enum dengan 7 nilai, 6 daripadanya menunjuk ke satu kelas dan yang terakhir menunjuk kepada jenis lain. Masalahnya ialah tidak kira apa jenis enum, apabila bersiri ia sentiasa ditukar kepada subjenis pertama.
enum DiscrType = {A: "a", B: "b", C: "c"} Diskriminasi kelas { @IsEnum(DiscrType) jenis: DiscrType } kelas ClassONE memanjangkan Diskriminator {...} kelas ClassTWO memanjangkan Diskriminator {...} barang kelas { @Type(() => Diskriminasi, { diskriminasi: { Jenis hartanah', subJenis: [ { nilai: ClassTWO, nama: DiscrType.C}, { value: ClassONE, name: DiscrType.A}, // Sentiasa bertukar menjadi nilai ini walaupun ia adalah B { nilai: ClassONE, nama: DiscrType.B}, ], }, keepDiscriminatorProperty: true, }) @Transform( ({ nilai }) => value?.map((objek: ClassONE | ClassTWO ) => object.type === DiscrType.C ? plainToClass(kelasTWO, objek) : plainToClass(ClassONE, objek), ), ) @ValidateNested({setiap: benar}) harta: (ClassONE | ClassTWO )[] }Tingkah laku:
new Stuff({type: DiscrType.B,...}) // Serialisasi dengan Class Serializer // Dijangka: x = {jenis: "b",...} // Sebenar: x = {type: "a",...}
Setakat ini, saya tidak pasti sama ada ini adalah penyelesaian yang sempurna, tetapi dalam projek saya, selepas menggantikan @Type dengan ini, semua ujian masih berjalan.
Memandangkan kaedah ini berkesan, saya akan membiarkannya sebagai penyelesaian, tetapi sila nyatakan jika anda tahu mengapa saya perlu menggunakan diskriminator dan bukannya penyelesaian ini, apakah faedahnya?