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
}