• 유틸리티 타입

    2024. 3. 11.

    by. JJo 😊

    📌 Partial<T>

    Partial 타입은 특정 타입의 부분 집합을 만족하는 타입을 정의할 수 있다.

    interface Address {
      email: string;
      address: string;
    }
    
    type MyEmail = Partial<Address>;
    const me: MyEmail = {}; // 가능
    const you: MyEmail = { email: "noh5524@gmail.com" }; // 가능
    const all: MyEmail = { email: "noh5524@gmail.com", address: "secho" }; // 가능

    👉 Partial 구현해 보기

    interface Profile {
        name: string;
        age: number;
        married: boolean
    }
    
    // case 1
    type P1 = {
        name?: Profile['name'];
        age?: Profile['age'];
        married?: Profile['married'] 
    }
    
    
    // case 2
    type P2<T> = {
        [key in keyof T]?: T[key]
    }

    📌 Pick<T, K>

    Pick 타입은 특정 타입에서 몇 개의 속성을 선택하여 타입을 정의한다.

    interface Profile {
        name: string;
        age: number;
        married: boolean
    }
    
    const user: Pick<Profile, 'name' | 'age'> = {
        name: 'eunhye'
        age: 30
    }

    👉 Pick 구현해 보기

    interface Profile {
        name: string;
        age: number;
        married: boolean
    }
    
    type P<T, S extends keyof T> = {
        [key in S]: T[key]
    }

    📌 Omit<T, K>

    Omit 타입은 특정 속성만 제거한 타입을 정의한다.

    interface Product {
        id: number;
        name: string;
        price: number;
        brand: string;
        stock: number;
    }
    
    type shoppingItem = Omit<Product, "stock">;
    
    // 여러개의 타입을 제외할 수도 있다.
    const apple: Omit<Product, "stock" | "brand"> = {
        id: 1,
        name: "red apple",
        price: 1000,
    };

    👉 Omit 구현해 보기

    interface Product {
        id: number;
        name: string;
        price: number;
        brand: string;
        stock: number;
    }
    
    type O<T, S extends keyof any> = Pick<T, Excliude<keyof T, S>>

    📌 Exclude<T, U>

    여러 개의 타입이 함께 존재하는 유니언 타입에서 특정 타입을 제거하는 타입이다.
    Exclude는 아래와 같이 정의되어 있다.

    type Exclude<T, U> = T extends U ? never : T;

     

    T에 오는 타입들 중에 U에 오는 것들은 제외하겠다는 의미이다.

    interface Profile {
        name: string;
        age: number;
        married: boolean
    }
    
    type A = Exclude<keyof Profile, 'age'> // type A = "name" | "married"

    📌 Extract<T, U>

    Exclude와 반대되는 개념으로 T 타입에서 U 타입과 겹치는 타입만을 추출한다.
    Extract는 아래와 같이 정의되어 있다.

    type Extract<T, U> = T extends U ? T : never;
    interface Profile {
        name: string;
        age: number;
        married: boolean
    }
    
    type B = Extract<keyof Profile, 'name'> // type B = "name"
    728x90

    댓글