중급 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 응답 처리 시 민감한 정보를 숨기는 데 큰 도움이 됩니다. 이러한 방식을 통해 우리는 더욱 안정적이고 관리하기 쉬운 코드를 작성할 수 있으며, 잦은 변경에도 쉽게 대응할 수 있는 구조로 만들 수 있습니다.

Subscribe to shimdh.log

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe