Plusieurs convertisseurs de classe @Type de la même classe pour des sous-types de types différents
<p>Suivez-moi, cela peut devenir un peu déroutant :</p><p><ul><li>J'utilise NestJs et un validateur/transformateur de classe. </li><li>Il existe un tableau qui peut contenir deux types. </li><li>J'utilise @Type pour définir des éléments via des discriminateurs. </li><li>J'utilise Transform car il est requis dans la sérialisation, sinon un objet vide sera créé. </li></ul></p><p>Maintenant, le problème est que mon discriminateur est une énumération avec 7 valeurs, 6 d'entre elles pointent vers une classe et la dernière pointe vers un autre type. Le problème est que quel que soit le type d'énumération, lors de la sérialisation, il est toujours remplacé par le premier sous-type. </p><p><br /></p>
<pre class="brush:js;toolbar:false;">enum DiscrType = {A : "a", B : "b", C : "c"}
Discriminateur de classe {
@IsEnum (TypeDiscr)
tapez : Type de disque
}
la classe ClassONE étend le discriminateur {...}
la classe ClassTWO étend le discriminateur {...}
trucs de classe {
@Type(() => Discriminateur, {
discriminateur : {
Type de propriété',
sous-types : [
{ valeur : ClasseDEUX, nom : DiscrType.C},
{ value : ClassONE, name : DiscrType.A}, // se transforme toujours en cette valeur même si elle était B
{ valeur : ClassONE, nom : DiscrType.B},
],
},
keepDiscriminatorProperty : vrai,
})
@Transformer(
({ valeur }) =>
value?.map((objet : ClassONE | ClassTWO ) =>
objet.type === DiscrType.C
? plainToClass(classDEUX, objet)
: plainToClass(ClassONE, objet),
),
)
@ValidateNested({chacun : vrai})
propriété : (ClassONE | ClassTWO)[]
}
≪/pré>
<p>Comportement :</p>
<pre class="brush:js;toolbar:false;">new Stuff({type: DiscrType.B,...}) // Sérialisation avec Class Serializer
// Attendu:
x = {type : "b",...}
// Réel:
x = {type : "a",...}<span style="font-family:'sans serif, tahoma, verdana, helvetica';"><span style="white-space:nowrap;" > </span></span></pré>
<p><br /></p>