Penukar kelas @Type berbilang kelas yang sama untuk subjenis jenis yang berbeza
P粉702946921
P粉702946921 2023-08-03 13:32:17
0
1
549

Ikut saya, ia mungkin menjadi sedikit mengelirukan:

  • Saya menggunakan NestJs dan class-validator/transformer.
  • Terdapat tatasusunan yang boleh mengandungi dua jenis.
  • Saya menggunakan @Type untuk menentukan item melalui diskriminasi.
  • Saya menggunakan Transform kerana ia diperlukan dalam siri, jika tidak, objek kosong akan dibuat.

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


P粉702946921
P粉702946921

membalas semua (1)
P粉141925181

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.

@Type((value) => value.object.type === DiscrType.C? ClassTWO: ClassONE, )

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?

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!