유틸리티 타입
1) Partial<T>
interface Address {
email: string;
address: string;
}
type MayHaveEmail = Partial<Address>;
const me: MayHaveEmail = {}; // 가능
const you: MayHaveEmail = { email: 'test@abc.com' }; // 가능
const all: MayHaveEmail = { email: 'capt@hero.com', address: 'Pangyo' }; // 가능
2) Required<T>
Required<T>
타입은 타입 T의 모든 속성을 필수적으로 만든다.interface Person {
name: string;
age: number;
address?: string; // 속성명 뒤에 붙는 "?"는 선택적 속성을 의미한다.
}
type RequiredPerson = Required<Person>; // 이렇게 사용하면 address는 필수 조건이 된다.
3) Readonly<T>
Readonly<T>
타입은 타입 T의 모든 속성을 읽기 전용(read-only)으로 만든다.interface DatabaseConfig {
host: string;
readonly port: number; // 인터페이스 내부에서도 readonly 타입 사용 가능하다.
}
const mutableConfig: DatabaseConfig = {
host: "localhost",
port: 3306,
};
const immutableConfig: Readonly<DatabaseConfig> = {
host: "localhost",
port: 3306,
};
mutableConfig.host = "somewhere";
immutableConfig.host = "somewhere"; // 타입이 Readonly로 지정되어 변경이 불가능.
4) Pick<T, K>
Pick<T, K>
유틸리티 타입은 타입 T에서 K 속성들만 선택하여 새로운 타입을 만든다.interface Hero {
name: string;
skill: string;
}
const human: Pick<Hero, 'name'> = {
name: '스킬이 없는 사람', // 한가지만 픽해서 타입 지정
};
interface Person {
name: string;
age: number;
address: string;
}
type SubsetPerson = Pick<Person, "name" | "age">;
const person: SubsetPerson = { name: "Nick", age: 30 };
5) Omit<T>
Omit<T, K>
유틸리티 타입은 타입 T에서 K 속성들만 제외한 새로운 타입을 만든다.interface AddressBook {
name: string;
phone: number;
address: string;
company: string;
}
const phoneBook: Omit<AddressBook, 'address'> = {
name: '재택근무',
phone: 12342223333,
company: '내 방'
}
const chingtao: Omit<AddressBook, 'address'|'company'> = {
name: '중국집',
phone: 44455557777
}
여기까지 기본적인 유틸리티 타입에 대해 정리해보았다.
아래 링크에서 더 많은 유틸리티 타입을 확인할 수 있다.
https://typescript-kr.github.io/pages/utility-types.html