-
📌 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'TypeScript' 카테고리의 다른 글
Typescript에서 window 객체에 property 추가하기 (0) 2023.09.03 setState를 props로 넘길 때 타입 설정 (0) 2023.08.21 Object key를 Type으로 만들기 (0) 2023.08.17 타입스크립트 설정 파일 (0) 2023.06.25 인터페이스(interface) (0) 2023.04.07 댓글