Partial, Required, Pick, Omit, Record 타입에 대해 알아 보자.
Partial 타입은 타입의 모든 속성을 선택사항으로 바꿔준다.
interface IProfile {
name: string;
age: number;
school: string;
hobby?: string;
}
// Partial 타입
type partial = Partial<IProfile>;

partial의 name, age, school, hobby 속성의 값들은 없어도 된다.Required 타입은 모든 속성을 필수사항으로 바꿔 준다. Partial 타입과 반대 역할이다.
interface IProfile {
name: string;
age: number;
school: string;
hobby?: string;
}
type required = Required<IProfile>;

IProfile의 hobby 속성이 선택사항이 아닌 필수사항으로 변경된 것을 확인할 수 있다.required의 name, age, school, hobby 속성의 값들은 필수적으로 있어야 한다.Pick 타입은 원하는 속성만 뽑아서 타입으로 만들고 싶을 때 사용한다.
interface IProfile {
name: string;
age: number;
school: string;
hobby?: string;
}
type myPick = Pick<IProfile, "name" | "hobby">;

myPick 타입에는 name, hobby? 속성만 있는 것을 확인할 수 있다.Omit 타입은 지정한 속성만 생략해서 사용하고 싶을 때 사용한다.
interface IProfile {
name: string;
age: number;
school: string;
hobby?: string;
}
type myOmit = Omit<IProfile, "school">;

myOmit 타입에는 school 속성을 제외한 나머지 속성들이 존재하는 것을 확인할 수 있다.Record 타입은 유틸리티 타입 속성을 다른 타입으로 매핑할 때 사용한다. Record<Key, Type> 형태로 사용하며, Key로 들어온 타입을 Type 값을 가지는 타입으로 만들 수 있다.
interface IProfile {
name: string;
age: number;
school: string;
hobby?: string;
}
type name = "캐비지" | "cabbage" | "태윤";
type myProfile = Record<name, IProfile>;

Key로 받고, 각각의 값을 IProfile 타입으로 매핑하였다.Key로 들어온 타입을 Type 값을 갖는 타입으로 만들고 싶을 때 사용한다.