"원본 타입의 불완전한 버전과 완전한 버전을 손으로 다시 적지 말고 관계로 만들어."
Partial은 모든 속성을 선택 사항으로
Partial<T>는 T의 각 속성에 ?를 붙인 새 타입을 만들어. User 전체가 아니라 바뀔 필드만 받는 수정 요청, 기본 설정 위에 일부만 덮는 옵션, 작성 중인 폼 상태에 잘 맞아.
원본 속성 이름과 값 타입을 그대로 따라가므로 User에 필드가 추가되면 Partial 버전에도 자동으로 반영돼. 같은 모양을 선택 속성으로 다시 손으로 적는 것보다 변경에 강하다.
Required는 반대 방향
Required<T>는 선택 속성에서 ?를 제거해 모두 필수로 만들어. 입력 단계에서는 일부 설정이 비어 있을 수 있지만 기본값을 적용한 뒤에는 모든 값이 존재한다고 표현할 때 유용해.
Required라고 적는 것만으로 실행 중 빈 값이 채워지는 것은 아니야. 실제 병합이나 검증을 수행한 뒤 그 결과 타입으로 사용해야 해. 타입 변환은 데이터 변환의 증거가 아니라 계약의 표현이니까.
둘 다 얕게 작동해
Partial<{ user: User }>는 user 속성 자체만 선택 사항으로 만들고 User 안쪽 속성은 건드리지 않아. 깊은 변환이 필요하면 재귀 매핑 타입을 만들 수 있지만, 도메인의 모든 층을 정말 선택 사항으로 만들어도 되는지 먼저 물어. 깊은 Partial은 잘못된 중간 상태를 너무 많이 허용할 수 있어.
Partial<T>는 { [K in keyof T]?: T[K] }라는 매핑된 타입으로 모든 키를 순회해 선택 사항으로 만들어. 자세한 매핑 규칙은 Type Manipulation 트랙에서 다루고, 여기서는 기존 계약의 부분 업데이트 모양을 복제 없이 파생한다는 점을 기억해.