💡 TypeScript는 일반적인 타입 변환을 쉽게 하기 위해서 몇 가지 유틸리티 타입을 제공한다. 이러한 유틸리티는 전역으로 사용 가능하다.
<Type>
Partial<Type>
타입은 타입 T의 모든 속성을 선택적으로 만든다.interface Person {
name: string;
age: number;
}
const updatePerson = (person: Person, fields: Partial<Person>): Person => {
return { ...person, ...fields };
};
const person: Person = { name: "Spartan", age: 30 };
const changedPerson = updatePerson(person, { age: 31 });
Partial<Person>
타입의 fields를 받고 있다.name
속성 age
속성 name, age
속성 둘 다 가질 수 있다.Partial<Type>
타입은 유연하게 타입의 속성을 선택해서 객체로 만들 수 있다.<Type>
Required<Type>
타입은 타입 T의 모든 속성을 필수적으로 만든다.interface Person {
name: string;
age: number;
address?: string;
}
?
는 선택적 속성임을 의미한다.Required<Type>
타입을 이용하여 다음과 같이 객체를 생성할 수 있다.type RequiredPerson = Required<Person>;
Required<Type>
타입을 통해 선언하면 address 입력도 필수적 속성으로 바꿀 수 있다. <Type>
Readonly<Type>
타입은 타입 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"; // 오류!
DatabaseConfig
가 가지는 두가지 속성 중 port만 readonly 이기 때문에 DatabaseConfig
는 불변 객체라고 할 수 없다.Readonly<Type>
타입을 사용하여 Readonly<DatabaseConfig>
로 만들어준 immutableConfig
은 불변 객체이다.Readonly<Type>
타입은 불변으로 객체를 상수화시킬 수 있다.<Type,Keys>
Pick<Type,Keys>
타입은 타입 T에서 K 속성들만 선택해서 새로운 타입을 만든다.interface Person {
name: string;
age: number;
address: string;
}
type SubsetPerson = Pick<Person, "name" | "age">;
const person: SubsetPerson = { name: "Spartan", age: 30 };
SubsetPerson
은 Person이라는 인터페이스에서 name
age
속성만 선택해서 구성된 새로운 타입이다.<Type,Keys>
Omit<Type,Keys>
유틸리티 타입은 타입 T에서 K 속성들만 제외한 새로운 타입을 만든다.interface Person {
name: string;
age: number;
address: string;
}
type SubsetPerson = Omit<Person, "address">;
const person: SubsetPerson = { name: "Alice", age: 30 };
SubsetPerson
타입은 Person 타입에서 address
속성만 제외한 새로운 타입이다.이 외에 다양한 유틸리티 타입 보러가기
Utility Types