중급 TypeScript - 유틸리티 타입: Omit
유틸리티 타입: Omit
유틸리티 타입은 TypeScript에서 자주 사용되는 도구로, 기존의 타입을 변형하거나 조작하여 새로운 타입을 만드는 데 도움을 줍니다. 그 중에서도 Omit
은 특정 속성을 제외한 새로운 타입을 생성하는 데 사용됩니다. 이를 통해 코드의 재사용성을 높이고, 불필요한 속성으로 인한 오류를 줄일 수 있습니다.
Omit의 기본 개념
- 기존 객체에서 일부 속성 제거:
Omit
은 주어진 객체 타입에서 특정 키를 제외하고 나머지 속성만 포함된 새로운 객체 타입을 만듭니다. - 타입 안전성 유지:
Omit
을 사용할 때는 TypeScript가 제공하는 강력한 정적 타이핑 기능 덕분에, 잘못된 속성이 사용될 경우 컴파일 타임에 오류를 발생시킵니다.
Omit의 문법
Omit<T, K>
- T: 원본 객체 타입
- K: 제외할 키(속성)의 union type
Practical Example
예를 들어, 다음과 같은 사용자 정보를 담고 있는 인터페이스가 있다고 가정해 보겠습니다:
interface User {
id: number;
name: string;
email: string;
password: string;
}
위 인터페이스에서 비밀번호(password
)를 제외하고 다른 정보만 필요하다고 가정하면, Omit
을 활용하여 새롭게 정의할 수 있습니다:
type PublicUser = Omit<User, 'password'>;
const user1: PublicUser = {
id: 1,
name: "홍길동",
email: "hong@example.com"
};
// 아래와 같이 password 필드를 추가하려 하면 오류 발생
// const user2: PublicUser = {
// id: 2,
// name: "김철수",
// email: "kim@example.com",
// password : "secret" // Error! 'password' does not exist in type 'PublicUser'
// };
위 예제에서는 PublicUser
라는 새로운 타입이 만들어졌습니다. 이때 비밀번호는 포함되지 않으므로 외부에 노출되어서는 안 되는 민감한 정보를 보호할 수 있습니다.
여러 개의 키 제거하기
여러 개의 키를 동시에 제거하고 싶다면 Union type으로 지정하면 됩니다. 예를 들어 이메일과 비밀번호 모두 제외하고 싶다면 다음과 같이 작성할 수 있습니다:
type RestrictedUser = Omit<User, 'email' | 'password'>;
const user3: RestrictedUser = {
id: 3,
name:"이영희"
};
// 아래와 같이 email 또는 password 필드를 추가하려 하면 오류 발생
// const user4 : RestrictedUser = {
// id : 4,
// name : "박민수",
// email : "park@example.com", // Error!
// };
// const user5 : RestrictedUser = {
// id : 5,
// name : "최진호",
// password : "mypassword" // Error!
// };
요약
Omit
유틸리티 타입은 TypeScript에서 매우 유용하게 사용되며, 특히 데이터 전송이나 API 응답 처리 시 민감한 정보를 숨기는 데 큰 도움이 됩니다. 이러한 방식을 통해 우리는 더욱 안정적이고 관리하기 쉬운 코드를 작성할 수 있으며, 잦은 변경에도 쉽게 대응할 수 있는 구조로 만들 수 있습니다.