작성
·
117
0
빨간줄 에러 그어져있는거를 읽고 ProductTag타입과
create-product.input.ts에서 선언한
@Field(() => [String])
productTags: string[];
이부분이 문제라고 판단을 했습니다.
더 깊게 파고들어가보면 선생님이 제시하신 숙제에대해서 먼저 살펴봐야할것 같다는 생각이 들었습니다.
1. 아래 코드에서 ...product
의 타입은 Product로 선언되어있습니다.
// 숙제-1)왜 아래 에러가 발생하는지 고민해보기
// 숙제-2)아래 에러 고쳐보기
const result = this.productsRepository.save({
...product,
...updateProductInput,
});
Product의 타입중 아래와같이 ProductTag[]를 필수로선언한게 있는데 이게 업데이트프로덕션인풋 타입과 충돌(?)이 일어나서 에러가 발생하는것 같았습니다.
productTags: ProductTag[];
왜냐하면 업데이트프로덕션인풋 타입은 아래처럼 모든 타입을 ?로 바꿔주고있기때문입니다.
PartialType(CreateProductInput)
create-product.input.ts에서 선언한 타입을 아래와 같이 바꿔주어 해결했습니다.
ProductTag의 {} 객체안에들어가는 값까지 다 ?로 바꿨습니다.
@Field(() => [String])
productTags: DeepPartial<ProductTag[]>;
여기까지가 제가 풀이해본건데요..
솔직히 맞는지 모르겠어요
요약하자면 ,updateProductInput이랑 product 타입이 충돌일어나서 그런거다. 라고 이해하고있는데 맞을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
질문하신 부분에 대해 답변 드리겠습니다. 네, 맞습니다. 귀하의 진단대로, updateProductInput
과 Product
타입 간에 발생하는 충돌이 문제의 원인으로 보입니다. Product
타입에서 productTags
를 ProductTag[]
로 필수 선언했고, updateProductInput
에서는 CreateProductInput
타입을 PartialType
으로 사용하여 모든 속성을 선택적(? 표시)으로 만들었습니다. 따라서, productTags
의 경우도 선택적으로 처리되어 ProductTag[]
와 타입이 일치하지 않게 되어 충돌이 발생했습니다.
create-product.input.ts
에서 productTags
타입을 DeepPartial<ProductTag[]>
로 변경하여 문제를 해결한 점은 올바른 접근 방식입니다. DeepPartial
을 사용하면 ProductTag
객체 내의 모든 속성이 선택적이 되어 PartialType(CreateProductInput)
을 사용할 때 발생하는 타입 충돌 문제를 해결할 수 있습니다.
요약하자면, updateProductInput
과 product
타입 간의 충돌이 문제의 원인이 맞으며, 속성을 선택적으로 처리함으로써 이 문제를 올바르게 해결하셨습니다.
추가적으로 궁금한 점이 있다면 언제든지 질문해 주세요.