TypeScript Omit과 Pick 활용 가이드: 언제 사용해야 할까?
2025-01-19 08:13:18TypeScript Omit과 Pick: 언제 사용해야 할까?
TypeScript를 활용하면 정적으로 타입을 검사하는 robust한 코드 작성을 할 수 있습니다. 그 중 Omit과 Pick 유틸리티는 특정 속성을 제외하거나 포함해 더 구체적인 타입을 만들어 줍니다. 이를 통해 TypeScript는 컴파일러에서 오류를 사전 탐지하고 유지보수가 쉬운 코드를 작성하도록 도와줍니다.
TypeScript Omit이란?
Omit은 기존의 타입에서 특정 속성을 제거한 새로운 타입을 생성합니다. 복잡한 데이터 구조를 단순화하고, 불필요한 속성을 제거해 코드 가독성을 높이는 데 유용합니다.
Omit 사용법 예시
interface User {
id: number;
username: string;
password: string;
email: string;
}
// 비밀번호 속성을 제거한 사용자 타입 생성
type PublicUser = Omit<User, "password">;
const user: PublicUser = {
id: 1,
username: "codewizard",
email: "wizard@code.com"
};
위 예시에서 PublicUser 타입은 비밀번호 속성을 제거하여 보다 안전한 형태의 데이터를 다룰 수 있게 합니다.
TypeScript Omit의 활용 사례
API 응답 데이터 정제
API 응답 데이터에서 민감한 정보를 제거할 때 유용합니다. 예를 들어 데이터베이스에서 가져온 사용자 정보를 클라이언트로 전송하기 전에 Omit을 통해 비밀번호 같은 민감한 정보를 제외할 수 있습니다.
interface DatabaseUser {
id: number;
username: string;
password: string;
passwordSalt: string;
email: string;
lastLogin: Date;
}
type ClientUser = Omit<DatabaseUser, "password" | "passwordSalt">;
function sanitizeUser(user: DatabaseUser): ClientUser {
const { password, passwordSalt, ...clientUser } = user;
return clientUser;
}
Form 검증 시 유용한 Omit
폼 데이터를 처리할 때도 사용됩니다. 사용자가 입력 가능한 값만을 포함하는 객체를 생성하여 불필요한 속성을 제거할 수 있습니다.
interface ProductForm {
name: string;
price: number;
createdAt: Date;
updatedAt: Date;
computedTax: number;
}
// 수정 가능한 필드만 포함
type EditableProductFields = Omit<ProductForm, "createdAt" | "updatedAt" | "computedTax">;
function updateProduct(id: number, updates: EditableProductFields) {
// ...
}
TypeScript Pick이란?
Pick은 주어진 타입에서 특정 속성을 선택하여 새 타입을 만듭니다. 필요한 속성만을 간결하게 다루고자 할 때 유용합니다.
Pick 사용법 예시
interface User {
id: number;
username: string;
password: string;
email: string;
}
// 이메일 속성만 포함한 타입 생성
type UserWithEmail = Pick<User, "email">;
UserWithEmail 타입은 기존의 User 타입에서 이메일 속성만을 떼어 내어 구체적으로 필요한 정보만 다룰 수 있게 합니다.
Omit과 Pick 비교
| 특성 | Omit | Pick |
|---|---|---|
| 목적 | 타입에서 특정 속성을 제외 | 타입에서 특정 속성만 포함 |
| 사용법 | Omit<Type, Keys> | Pick<Type, Keys> |
| 생성된 타입 | 제외한 속성 외 모든 속성 포함 | 포함한 속성만 포함 |
| 대표적 사용 | 지정 속성을 삭제하고 싶을 때 | 필요 속성만 유지하고 싶을 때 |
| 타입 보존 | 나머지 속성의 타입 안전성 유지 | 선택된 속성의 타입 안전성 유지 |
결론
TypeScript의 Omit과 Pick을 적절히 활용하면 더 효율적이고 유연한 타입을 설계할 수 있습니다. 코드의 가독성과 안전성을 높이고자 한다면 이 유틸리티들을 현명하게 사용해 보세요.
더 많은 정보는 TypeScript 공식 문서에서 확인할 수 있습니다.