찾다

 >  Q&A  >  본문

다양한 유형의 하위 유형에 대한 동일한 클래스의 여러 @Type 클래스 변환기

<p>나를 따라오세요. 약간 혼란스러울 수 있습니다.</p><p><ul><li>저는 NestJ와 클래스 유효성 검사기/변환기를 사용하고 있습니다.
  • 두 가지 유형을 포함할 수 있는 배열이 있습니다.
  • 나는 @Type을 사용하여 판별자를 통해 항목을 정의합니다. </li><li>직렬화에 필요하기 때문에 Transform을 사용합니다. 그렇지 않으면 빈 개체가 생성됩니다. </li></ul></p><p>이제 문제는 내 판별자가 7개의 값을 가진 열거형이라는 것입니다. 그 중 6개는 한 클래스를 가리키고 마지막 하나는 다른 종류를 가리킵니다. 문제는 열거형 유형이 무엇이든 직렬화할 때 항상 첫 번째 하위 유형으로 변경된다는 것입니다.


    <pre class="brush:js;toolbar:false;">enum DiscrType = {A: "a", B: "b", C: "c"} 클래스 판별자 { @IsEnum(디스크 유형) 유형: 디스크 유형 } 클래스 ClassONE은 판별자 {...}를 확장합니다. 클래스 ClassTWO는 판별자 {...}를 확장합니다. 클래스 물건 { @Type(() => 판별자, { 판별자: { 속성: '유형', 하위 유형: [ { 값: ClassTWO, 이름: DiscrType.C}, { value: ClassONE, name: DiscrType.A}, // B이더라도 항상 이 값으로 바뀐다. { 값: ClassONE, 이름: DiscrType.B}, ], }, keepDiscriminatorProperty: true, }) @변환( ({ 값 }) => value?.map((객체: ClassONE | ClassTWO ) => object.type === DiscrType.C ? plainToClass(classTWO, 객체) : plainToClass(ClassONE, 객체), ), ) @ValidateNested({각각: true}) 속성: (ClassONE | ClassTWO)[] } </pre> <p>행동:</p> <pre class="brush:js;toolbar:false;">new Stuff({type: DiscrType.B,...}) // 클래스 직렬 변환기를 사용한 직렬화 // 예상되는: x = {유형: "b",...} // 실제: x = {유형: "a",...}<span style="font-family:'sans serif, tahoma, verdana, helvetica';"><span style="white-space:nowrap;" ></span></span></pre> <p><br /></p>
  • P粉702946921P粉702946921481일 전615

    모든 응답(1)나는 대답할 것이다

  • P粉141925181

    P粉1419251812023-08-04 11:59:19

    지금으로서는 이것이 완벽한 솔루션인지 확신할 수 없지만 제 프로젝트에서는 @Type을 이것으로 바꾼 후에도 모든 테스트가 계속 실행됩니다.

    으아악

    이 방법이 효과가 있으므로 솔루션으로 남겨 두겠습니다. 그런데 이 솔루션 대신 판별자를 사용해야 하는 이유를 알고 계시다면 어떤 이점이 있는지 언급해 주세요.

    회신하다
    0
  • 취소회신하다