Skip to main content

TypeScript 유틸리티 타입

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

총 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
}