Today I Learned_230417
TypeScript
utility types로 알아보기
utility type을 왜 써야 하는가?
아래와 같은 상황일 때…
interface Profile {
name: string,
age: number,
married: boolean,
}
const heejung: Profile = {
name: 'heejung',
age: 29,
married: false,
}
married만 빼서 쓰자니 아래와 같이 애매해진다..
// 이거는 불가능
const newheejung: Profile = {
name: 'zerocho',
age: 29,
}
// 이렇게 다시 만들자니 너무 중복이고..
interface NewProfile {
name: string,
age: number,
}
Utility type중 Partial을 여기서 사용
const newheejung: Partial<Profile> = {
name: 'heejung',
age: 29,
}
- Partial 직접 구현
// 인덱스드 시그니처, mapped types 활용
type P<T> = {
// Key는 T의 키들만 올 수 있다.
[Key in keyof T]?: T[Key];
}
Partial은 원래 속성을 다 optional로 만들어 준다.
// 예를 들면 이렇게 만들어 준다.
interface Profile {
name?: string,
age?: number,
married?: boolean,
}
다 꺼내서 optional로 만든 다음, value의 타입을 매핑해 준다.
- Pick
- 여러 속성 고르기
- Partial보단 Pick, Omit 사용하자
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
// 제네릭간의 제한조건 먼저 붙여준다.
// 뒤에 오는 인자값은 T의 key의 부분집합
type P<T, U extends keyof T> = {
[Key in U]?: T[Key];
}
const newheejung: Pick<Profile, 'name' | 'age'> = {
name: 'heejung',
age: 29,
}
.