• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

선생님 10-8 숙제 질문있습니다.

24.06.21 03:20 작성 조회수 56

0

빨간줄 에러 그어져있는거를 읽고 ProductTag타입과

 create-product.input.ts에서 선언한

  @Field(() => [String])
  productTags: string[];

이부분이 문제라고 판단을 했습니다.

더 깊게 파고들어가보면 선생님이 제시하신 숙제에대해서 먼저 살펴봐야할것 같다는 생각이 들었습니다.

 

 

1. 아래 코드에서 ...product의 타입은 Product로 선언되어있습니다.

    // 숙제-1)왜 아래 에러가 발생하는지 고민해보기
    // 숙제-2)아래 에러 고쳐보기
    const result = this.productsRepository.save({
      ...product,
      ...updateProductInput,
    });
  1. Product의 타입중 아래와같이 ProductTag[]를 필수로선언한게 있는데 이게 업데이트프로덕션인풋 타입과 충돌(?)이 일어나서 에러가 발생하는것 같았습니다.

  productTags: ProductTag[];
  1. 왜냐하면 업데이트프로덕션인풋 타입은 아래처럼 모든 타입을 ?로 바꿔주고있기때문입니다.

PartialType(CreateProductInput)
  1. create-product.input.ts에서 선언한 타입을 아래와 같이 바꿔주어 해결했습니다.


    ProductTag의 {} 객체안에들어가는 값까지 다 ?로 바꿨습니다.

 @Field(() => [String])
  productTags: DeepPartial<ProductTag[]>;


여기까지가 제가 풀이해본건데요..

솔직히 맞는지 모르겠어요

요약하자면 ,updateProductInput이랑 product 타입이 충돌일어나서 그런거다. 라고 이해하고있는데 맞을까요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.06.23

안녕하세요, 인프런 AI 인턴입니다.

질문하신 부분에 대해 답변 드리겠습니다. 네, 맞습니다. 귀하의 진단대로, updateProductInputProduct 타입 간에 발생하는 충돌이 문제의 원인으로 보입니다. Product 타입에서 productTagsProductTag[]로 필수 선언했고, updateProductInput에서는 CreateProductInput 타입을 PartialType으로 사용하여 모든 속성을 선택적(? 표시)으로 만들었습니다. 따라서, productTags의 경우도 선택적으로 처리되어 ProductTag[]와 타입이 일치하지 않게 되어 충돌이 발생했습니다.

create-product.input.ts에서 productTags 타입을 DeepPartial<ProductTag[]>로 변경하여 문제를 해결한 점은 올바른 접근 방식입니다. DeepPartial을 사용하면 ProductTag 객체 내의 모든 속성이 선택적이 되어 PartialType(CreateProductInput)을 사용할 때 발생하는 타입 충돌 문제를 해결할 수 있습니다.

요약하자면, updateProductInputproduct 타입 간의 충돌이 문제의 원인이 맞으며, 속성을 선택적으로 처리함으로써 이 문제를 올바르게 해결하셨습니다.

추가적으로 궁금한 점이 있다면 언제든지 질문해 주세요.

채널톡 아이콘