프로그래밍프론트엔드 개발자

Partial 메커니즘은 TypeScript에서 어떻게 작동하며, 무엇을 위해 필요한지, API 설계 시 어떻게 적용하는지, 그리고 자주 발생하는 오류는 무엇인지?

Hintsage AI 어시스턴트로 면접 통과

답변.

Partial<T> 메커니즘은 TypeScript에서 객체의 속성이 일시적으로 정의되지 않을 수 있는 경우 작업을 보다 쉽게 하기 위해 도입되었습니다. 역사적으로 개발자들은 모든 속성을 선택 사항으로 만들기 위해 새로운 유형을 수동으로 생성해야 했습니다. 이는 코드 중복과 오류를 초래했습니다.

문제의 역사

초기에는 선택적 필드가 있는 객체를 업데이트하거나 생성할 때 각 선택적 속성을 명시적으로 지정해야 했습니다. 이는 불편했고 원래 인터페이스의 변경을 지원하지 않았습니다. 그래서 모든 T 유형의 속성을 자동으로 선택 사항으로 변환하는 유틸리티 유형 Partial<T>가 등장했습니다.

문제

API 설계 시 객체의 일부만 업데이트해야 할 때가 자주 있으며, 나머지 필드는 건드리지 않아야 합니다. 이는 특히 PATCH 요청, 업데이트 양식 및 일부 데이터만 처리하는 기능에 해당됩니다. Partial 없이 타입 지정이 복잡하고 취약해집니다.

해결책

유틸리티 타입 Partial<T>를 사용하며, 대략 다음과 같이 정의됩니다:

// 단순화: type Partial<T> = { [P in keyof T]?: T[P] };

따라서 모든 속성이 선택 사항이 됩니다. 예를 들어:

interface User { id: number; name: string; email: string; } function updateUser(id: number, user: Partial<User>) { // ... } // 수정할 내용만 전달 가능 updateUser(1, { email: "test@example.com" });

주요 특징:

  • 업데이트하거나 설정해야 하는 필드만 설명할 수 있습니다.
  • 원래 인터페이스의 구조를 완전히 상속하여 타입 안전성을 보장합니다.
  • Pick, Omit과 같은 다른 유틸리티 타입과 편리하게 조합됩니다.

속임수 질문.

Partial을 통해 원래 인터페이스의 모든 필드를 필수로 만들 수 있나요?

아니요, Partial은 모든 속성을 선택 사항으로 만듭니다. 반대 작업을 위해 Required<T> 유형이 있습니다.

이미 선택적인 속성과 함께 Partial을 사용하면 어떻게 되나요?

Partial은 이미 선택적인 속성을 변경하지 않으며, 모든 필드는 Partial 적용 이전과 동일하게 선택 사항으로 남아 있습니다.

예:

interface X { x?: number; y: string; } const a: Partial<X> = {}; // 두 속성이 이제 모두 선택 사항

Partial을 사용하여 중첩 구조를 사용하는 경우 중첩된 필드만 선택 사항으로 만들 수 있나요?

Partial은 중첩된 객체에 재귀적으로 전파되지 않습니다. 모든 중첩 속성을 선택 사항으로 만들려면 사용자 지정 제네릭 타입을 작성하거나 외부 유틸리티를 사용해야 합니다.

전형적인 오류 및 안티 패턴

  • 재귀 래퍼 없이 깊은 구조에 Partial을 사용하려는 시도가 예상치 못한 타입 오류를 초래합니다.
  • "제로에서" 객체를 생성하기 위해 Partial을 사용하는 경우 필수 필드가 없는 객체가 생성됩니다.
  • 개별 속성을 업데이트하는 대신 전체 객체를 덮어쓰는 경우 타입 계약을 위반합니다.

실생활 사례

부정적인 케이스

CRUD 시스템에서 updateUserPartial<User>를 받아들이며 빈 객체를 전달할 수 있어 런타임에서 필수 필드가 사라지는 오류를 초래할 수 있습니다.

장점:

  • 업데이트의 유연성; 모든 것을 전달할 필요 없음.

단점:

  • 필수 필드가 없는 객체가 데이터베이스에 저장될 위험.

긍정적인 케이스

Partial<User>는 업데이트 입력 양식을 설명하는 데만 사용됩니다. 최종 단계에서 모든 필드는 유효성을 검사하고 원래 객체와 병합되어 데이터베이스에 전달됩니다.

장점:

  • 입력 단계에서 부드러운 타입 지정; 데이터는 항상 저장할 수 있는 올바른 형식임.

단점:

  • 추가 유효성 검사 및 데이터 병합이 필요함.