Penukar kelas @Type berbilang kelas yang sama untuk subjenis jenis yang berbeza
<p>Ikut saya, ia mungkin menjadi sedikit mengelirukan:</p><p><ul><li>Saya menggunakan NestJs dan class-validator/transformer. </li><li>Terdapat tatasusunan yang boleh mengandungi dua jenis. </li><li>Saya menggunakan @Type untuk menentukan item melalui diskriminasi. </li><li>Saya menggunakan Transform kerana ia diperlukan dalam siri, jika tidak, objek kosong akan dibuat. </li></ul></p><p>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. </p><p><br /></p>
<pre class="brush:js;toolbar:false;">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 )[]
}
</pra>
<p>Tingkah laku:</p>
<pre class="brush:js;toolbar:false;">new Stuff({type: DiscrType.B,...}) // Serialisasi dengan Class Serializer
// Dijangka:
x = {jenis: "b",...}
// Sebenar:
x = {type: "a",...}<span style="font-family:'sans serif, tahoma, verdana, helvetica';"><span style="white-space:nowrap;" > </span></span></pre>
<p><br /></p>