: 제네릭, 맵드 타입, 조건부 타입 등의 타입 조작기능을 이용해 실무에서 자주 사용되는 타입을 미리 만들어 놓은것
Documentation - Utility Types
Types which are globally included in TypeScript
www.typescriptlang.org
- Partial<T>
: 특정 객체 타입의 모든 프로퍼티를 선택적 프로퍼티로 바꿔주는 타입
interface Post {
title: string;
tags: string[];
content: string;
thumbnailURL?: string;
}
type Partial<T> = {
[key in keyof T]?: T[key];
};
const draft: Partial<Post> = {
title: "제목 나중에",
content: "초안",
};
- Required<T>
: 특정 객체 타입의 모든 프로퍼티를 필수 프로퍼티로 바꿔주는 타입
...Post
type Required<T> = {
[key in keyof T]-?: T[key];
};
const withThumbnailPost: Required<Post> = {
title: "한입",
tags: ["ts"],
content: "",
thumbnailURL: "https://",
};
- Readonly<T>
: 특정객체 타입에서 모든 프로퍼티를 읽기 전용 프로퍼티로 만들어주는 타입, 읽기전용/수정불가
...Post
type Readonly<T> = {
readonly [key in keyof T]: T[key];
};
const readonlyPost: Readonly<Post> = {
title: "보호된 게시물 입니다.",
tags: [],
content: "",
};
readonlyPost.content = ""; // ❌ 수정불가
- Pick<T, K>
: 객체타입으로부터 특정 프로퍼티만 딱 골라내는 그런 타입
...Post
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: "옛날 컨텐츠",
};
- Omit<T, K>
: 객체 타입으로부터 특정 프로퍼티를 제거하는 타입
...Post
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
// Pick<Post, Exclude<keyof Post, "title">>
// Pick<Post, Exclude<'title' | 'tags' | 'content' | 'thumbnailURL', "title">> => Exclude "title" 제거한 타입 반환
// Pick<Post, <'tags' | 'content' | 'thumbnailURL'>
const noTitlePost: Omit<Post, "title"> = {
content: "",
tags: [],
thumbnailURL: "",
};
- Record<K, V>
type Record<K extends keyof any, V> = {
[key in K]: V;
};
type Thumbnail = Record<
"large" | "medium" | "small" | "watch",
{ url: string; size: number }
>;
- Exclude<T, U>
: T에서 U를 제거하는 타입
type Exclude<T, U> = T extends U ? never : T;
type A = Exclude<string | boolean, boolean>; // string
- Extract<T, U>
: T에서 U를 추출하는 타입
type Extract<T, U> = T extends U ? T : never;
type B = Extract<string | boolean, boolean>; // boolean
- ReturnType<T>
: 함수의 반환값 타입을 추출하는 타입
type ReturnType<T extends (...args: any) => any> = T extends (
...args: any
) => infer R
? R
: never;
function funcA() {
return "hello";
}
function funcB() {
return 10;
}
type ReturnA = ReturnType<typeof funcA>; // string
type ReturnB = ReturnType<typeof funcB>; // number
'Front > typescript' 카테고리의 다른 글
조건부 타입 (0) | 2023.09.01 |
---|---|
타입 조작 (0) | 2023.08.25 |
제네릭 (0) | 2023.08.23 |
클래스 Classes (0) | 2023.08.23 |
인터페이스 (0) | 2023.08.23 |