TypeScript

TypeScript 유틸리티 타입

milliwonkim 2023. 3. 1. 14:15
반응형
SMALL

제네릭 타입이라고도 불립니다.

 

총 3가지입니다.

 

1. Partial

Person 타입 중에서 부분집합 타입으로 지정할 수 있다.

하나만 만족해도 됨

interface Person {
    name: string;
    age: number;
    hasGirlFriend?: boolean;
}

type MyInfo = Partial<Person>;

// 가능
const kiwon: MyInfo = {}

// 가능
const kiwon: MyInfo = {
    name: 'kiwon kim',
    age: 29,
}

// 가능
const kiwon: MyInfo = {
    name: 'kiwon kim',
    age: 29,
    hasGirlFriend: true,
}

// 불가능
const kiwon: MyInfo = {
    name: 'kiwon', 
    email: 'address@adress.com' 
}
/*
Type '{ name: string; email: string; }' is not assignable to type 'Partial<Person>'.
  Object literal may only specify known properties, 
  and 'email' does not exist in type 'Partial<Person>'.(2322)
*/

 

2. Pick

Person 타입에서 특정 타입 하나 이상을 가져올 수 있다.

interface Person {
    name: string;
    age: number;
    hasGirlFriend?: boolean;
}

// 가능
const kiwon: Pick<Person, 'name'> = {
    name: 'kiwon kim'
}

// 가능
const kiwon: Pick<Person, 'name' | 'age'> = {
    name: 'kiwon kim',
    age: 29,
}

// 가능
const kiwon: Pick<Person, 'name' | 'age' | 'hasGirlFriend'> = {
    name: 'kiwon kim',
    age: 29,
    hasGirlFriend: true,
}

// 불가능
const kiwon: Pick<Person, 'age' | 'hasGirlFriend'> = {
    name: 'kiwon kim',
    age: 29,
    hasGirlFriend: true,
}

// 불가능
const kiwon: Pick<Person, 'name' | "birth"> = {
    name: 'kiwon',   
}

/*
Property 'birth' is missing in type '{ name: string; }' 
but required in type 'Pick<Person, "name" | "birth">'.(2741)
*/

 

3. Omit

Person 타입에서 특정 하나 이상의 타입을 제거할 수 있다.

Omit으로 선택한 props의 타입 대신에 다른 타입을 집어넣을 수 있다.

interface Person {
    name: string;
    age: number;
    hasGirlFriend?: boolean;
}

// 가능
const kiwon: Omit<Person, 'name'> = {
    age: 29,
    name: 59
}
반응형
LIST