한 입 크기로 잘라먹는 타입스크립트 - 맵드 타입 기반의 유틸리티 타입들 2 (Pick<T, K>, Omit<T, K>, Record<T, K>)
1. Pick<T, K>
객체 타입으로부터 특정 프로퍼티만 딱 골라내는 타입.
- chapter2.ts
/**
* Pick<T, K>
* -> 뽑다, 고르다
* -> 객체 타입으로부터 특정 프로퍼티만 딱 골라내는 타입
*/
// 블로그 게시글 객체
interface Post {
title: string;
tags: string[];
content: string;
thumbnailURL?: string;
}
/* 원본 유틸리티 타입
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
*/
// 직접 만들기 : 맵드 타입, 인덱스드 액세스 타입, 조건부 타입
type Pick<T, K extends keyof T> = {
// K extends 'title' | 'tags' | 'content' | 'thumbnailURL'
// 'title' | 'content' extends 'title' | 'tags' | 'content' | 'thumbnailURL'
[key in K]: T[key];
};
// 옛날에 작성된 게시글
const legacyPost: Pick<Post, 'title' | 'content'> = {
title: '옛날 글'
, content: '옛날 컨텐츠'
};
2. Omit<T, K>
객체 타입으로부터 특정 프로퍼티를 제거하는 타입.
- chapter2.ts
...
/**
* Omit<T, K>
* -> 생략하다, 빼다
* -> 객체 타입으로부터 특정 프로퍼티를 제거하는 타입
*/
/* 원본 유틸리티 타입
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
*/
// 직접 만들기 : 조건부 타입
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
// T = Post, K = 'title'
// Pick<Post, Exclude<keyof Post, 'title'>>
// Pick<Post, Exclude<'title' | 'tags' | 'content' | 'thumbnailURL', 'title'>>
// Pick<Post, 'tags' | 'content' | 'thumbnailURL'>>
// 제목이 없는 글
const noTitlePost: Omit<Post, 'title'> = {
tags: []
, content: ''
, thumbnailURL: ''
};
3. Record<T, K>
동일한 패턴을 갖는 객체 타입을 쉽게 정의해주는 유틸리티 타입.
인덱스 시그니처 처럼 유연하지만 좀 더 제한적인 객체타입 정의할 때 사용.
실무에서 자주 쓰인다.
- chapter2.ts
...
/**
* Record<T, K>
* -> 동일한 패턴을 갖는 객체 타입을 쉽게 정의해주는 유틸리티 타입
* -> 인덱스 시그니처 처럼 유연하지만 좀 더 제한적인 객체타입 정의할 때 사용
*/
/* 원본 유틸리티 타입
type Record<K extends keyof any, T> = {
[P in K]: T;
};
*/
// 직접 만들기 : 맵드 타입, 조건부 타입
type Record<K extends keyof any, V> = {
[key in K]: V
};
// 레코드 타입 사용 전
type ThumbnailLegacy = {
large: {
url: string;
};
medium: {
url: string;
};
small: {
url: string;
};
watch: {
url: string;
};
};
// 레코드 타입 사용
type Thumbnail = Record<'large' | 'medium' | 'small' | 'watch', { url: string; size: number; }>;
한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런
이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻♀️로 만들어드립니다., 프론
www.inflearn.com
'강의 실습 > 한 입 크기로 잘라먹는 타입스크립트(TypeScript)' 카테고리의 다른 글
타입스크립트 리액트 시작하기 (0) | 2024.12.26 |
---|---|
조건부 타입 기반의 유틸리티 타입 - Exclude, Extract, ReturnType (1) | 2024.12.25 |
맵드 타입 기반의 유틸리티 타입 1 - Partial, Required, Readonly (0) | 2024.12.23 |
유틸리티 타입 소개 (0) | 2024.12.22 |
infer - 조건부 타입 내에서 타입 추론하기 (1) | 2024.12.21 |
댓글