기존 타입 중 원하는 속성이나 타입을 골라 선언할 수 있다.
/**
* From T, pick a set of properties whose keys are in the union K
*/
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
type Props = {
title: string,
color: string,
isFull: boolean,
}
type StyledPrps = Pick<Props, 'color' | 'isFull' >
중복된 타입을 선언하지 않아도 되고, 참조한 타입이 수정되었을 때도 수정된 타입으로 반영되기 때문에 관리 포인트가 줄어든다.
Exclude Type
유니언 타입에서 특정 타입을 제외하는 유틸리티 타입이다.
/**
* Exclude from T those types that are assignable to U
*/
type Exclude<T, U> = T extends U ? never : T;
// 유니언 타입
type Color = 'red' | 'blue' | 'green';
// 'error' 타입을 제외한 새로운 타입 생성
type RedOrBlue = Exclude<Color, 'green'>;
Omit은 기존 타입에서 일부 속성을 제외한 새로운 타입을 생성하기 위해 사용한다.
/**
* Construct a type with the properties of T except for those in type K.
*/
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
interface LoginInfo {
id: number;
name: string;
email: string;
password: string;
}
// password 속성을 제외한 User 타입을 정의
type UserInfo = Omit<LoginInfo, 'password'>;