Mehrere @Type-Klassenkonverter derselben Klasse für Untertypen unterschiedlicher Typen
<p>Folgen Sie mir, es könnte etwas verwirrend werden:</p><p><ul><li>Ich verwende NestJs und Class-Validator/Transformer. </li><li>Es gibt ein Array, das zwei Typen enthalten kann. </li><li>Ich verwende @Type, um Elemente über Diskriminatoren zu definieren. </li><li>Ich verwende Transform, weil es für die Serialisierung erforderlich ist, andernfalls werden leere Objekte erstellt. </li></ul></p><p>Das Problem ist nun, dass mein Diskriminator eine Aufzählung mit 7 Werten ist, 6 davon zeigen auf eine Klasse und der letzte zeigt auf eine andere Art. Das Problem besteht darin, dass unabhängig vom Aufzählungstyp bei der Serialisierung immer in den ersten Untertyp geändert wird. </p><p><br /></p>
<pre class="brush:js;toolbar:false;">enum DiscrType = {A: "a", B: "b", C: "c"}
Klasse Diskriminator {
@IsEnum(DiscrType)
Typ: DiscrType
}
Klasse ClassONE erweitert Discriminator {...}
Klasse ClassTWO erweitert Discriminator {...}
Klassenmaterial {
@Type(() => Diskriminator, {
Diskriminator: {
Art der Immobilie',
Untertypen: [
{Wert: ClassTWO, Name: DiscrType.C},
{ value: ClassONE, name: DiscrType.A}, // Wird immer in diesen Wert umgewandelt, auch wenn es B war
{Wert: ClassONE, Name: DiscrType.B},
],
},
keepDiscriminatorProperty: true,
})
@Verwandeln(
({ Wert }) =>
value?.map((object: ClassONE | ClassTWO ) =>
object.type === DiscrType.C
? plainToClass(classTWO, object)
: plainToClass(ClassONE, Objekt),
),
)
@ValidateNested({each: true})
Eigenschaft: (ClassONE | ClassTWO )[]
}
</pre>
<p>Verhalten:</p>
<pre class="brush:js;toolbar:false;">new Stuff({type: DiscrType.B,...}) // Serialisierung mit Class Serializer
// Erwartet:
x = {Typ: "b",...}
// Tatsächlich:
x = {type: "a",...}<span style="font-family:'sans serif, tahoma, verdana, helvetica';"><span style="white-space:nowrap;" > </span></span></pre>
<p><br /></p>