- 이미 정의해 놓은 타입을 변환하고자 할 때 사용.
- 유틸리티 타입을 이용하여 기존의 타입을 이용해 새로운 타입을 만들 수 있음.
partial< T >
interface Todo {
title: string;
description: string;
}
function updateTodo(todo: Todo, fieldsToUpdate: Partial<Todo>) {
return {...todo, ...fieldsToUpdate};
}
const todo1 = {
title: 'room',
description: 'clean room',
};
const todo2 = updateTodo(todo1, {
description: '',
});
- 프로퍼티를 선택적으로 만드는 타입을 구성
- 주어진 타입의 모든 하위 타입 집합을 나타내는 타입을 반환
Readonly< T >
interface Todo {
title: string;
}
const todo: Readonly<Todo> = {
title: 'good',
};
todo.title = 'nice';
- 프로퍼티를 읽기 전용(readonly)으로 설정한 타입을 구성한다.
Record< T >
interface Pageinfo {
title: string;
}
type Page = 'home' | 'about' | 'contact';
const x: Record<Page, PageInfo> = {
about: {title: 'about'},
contact: {title: 'contact'},
home: {subTitle: 'home'},
main: {title: 'home'},
};
- 프로퍼티의 집합 K로 타입을 구성한다.
- 타입의 프로퍼티들을 다른 타입에 매핑시키는데 사용함.
Pick<T,K>
interface Todo {
title: string;
description: string;
completed: boolean;
}
type TodoPreview = Pick<Todo, 'title' | 'completed'>;
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
description: 'description',
};
Omit<T,K>
interface Todo {
title: string;
description: string;
completed: boolean;
}
type TodoPreview = Omit<Todo, 'description'>;
const todo: TodoPreview = {
title: 'Cleanroom',
completed: false,
description: 'description',
};
- 모든 프로퍼티를 선택한 다음 K를 제거한 타입을 구성함.
Exclude<T,U>
type T0 = Exclude<'a' | 'b' | 'c', 'a'>;
type T1 = Exclude<'a' | 'b' | 'c', 'a' | 'b'>;
type T2 = Exclude<string | number | (() => void), Function>;
- T에서 U에 할당할 수 있는 모든 속성을 제외한 타입을 구성
type T0 = Extract<'a' | 'b' | 'c', 'a' | 'f'>;
type T1 = Extract<string | number | (() => void), Function>;
- T에서 U에 할당할 수 있는 모든 속성을 추출하여 타입을 구성
NonNullable< T >
type T0 = NonNullable<string | number | undefined>;
Parameters< T >
declare function f1(arg: {a: number; b: string}): void;
type T0 = Parameters<typeof f1>;
type T1 = Parameters<() => string>;
type t2 = Parameters<(s: string) => void>;
- '함수 타입 T'의 매개변수 타입들의 '튜플 타입'을 구성
ReturnType< T >
type T0 = ReturnType<() => string>;
type T1 = ReturnType<(s: string) => void>;
type T2 = ReturnType<<T extends U, U extends number[]>() => T>;
- 함수T의 반환 타입으로 구성된 타입을 생성함.
Required< T >
interface Props {
a?: number;
b?: string;
}
const obj: Props = {a: 5};
const obj2: Required<Props> = {a: 5};
- T의 모든 프로퍼티가 필수로 설정된 타입을 구성