"남길 목록이 짧으면 Pick, 뺄 목록이 짧으면 Omit. 중요한 건 원본을 복사하지 않는 거야."
Pick은 선택한 속성만 남겨
Pick<User, 'id' | 'name'>은 User의 두 속성만 가진 새 타입을 만들어. 두 번째 타입 인자는 keyof User 안에서만 고를 수 있어. 존재하지 않는 이름을 넣으면 오류가 난다. 공개 프로필, 목록 행, 함수가 필요한 최소 입력처럼 원본의 작은 부분에 잘 맞아.
Omit은 선택한 속성만 빼
Omit<User, 'password'>은 password를 제외한 나머지 속성을 유지해. 서버 내부 모델에서 민감 필드나 생성 전에는 없는 필드를 제거한 파생 타입을 만들 때 편리해.
다만 타입에서 필드를 뺐다고 실행 객체에서 값이 사라지는 것은 아니야. User를 SafeUser 타입 변수에 대입해도 원본 객체 안에는 password가 남을 수 있어. 실제 응답에서 제거하려면 구조 분해나 명시적 직렬화가 필요하다.
타입 파생은 실행 데이터 정제와 다르다. 계약과 실제 객체 양쪽에서 같은 필드를 다루는지 확인해.