인프런 커뮤니티 질문&답변

반가우면반갑다고해님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

11-로그인 프로세스 이해

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

작성

·

117

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 인턴입니다.

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

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

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

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