<T>
TypeScript의 Partial 타입은 제네릭 타입으로, 주어진 객체 타입의 모든 속성을 선택적으로 만들어주는 유틸리티 타입이다. 이것은 주로 객체의 일부 속성을 업데이트하거나 변경할 때 유용하게 사용된다.
예를 들어, 다음은 Partial을 사용하여 객체의 일부 속성을 선택적으로 만들어 준다.
type Person = {
name: string;
age: number;
email: string;
};
const partialPerson: Partial<Person> = {
name: "John",
// age와 email을 제공하지 않아도 됨 (모두 optional이 된다.)
};
위 예제에서 Partial은 Person 타입의 모든 속성을 선택적으로 만든다. 따라서 partialPerson 객체에서 name 속성만 지정하고 다른 속성을 생략할 수 있다.
Partial은 TypeScript의 다양한 상황에서 유용하게 사용될 수 있으며, 객체 타입을 조작하고 새로운 타입을 생성할 때 도움이 된다.
<T>
이 타입은 주어진 타입 내의 모든 속성을 필수로 만들어주는 역할을 한다. 즉, 선택적인 속성을 가진 타입을 필수 속성으로 변환해준다. 위의 Partial 타입과 정반대인 역할이다.
interface User {
name?: string;
age?: number;
}
const partialUser: Partial<User> = {}; // Partial을 사용하여 모든 속성을 선택적으로 만듦
const requiredUser: Required<User> = { name: 'John', age: 30 };
// Required를 사용하여 모든 속성을 필수적으로 변경함
<T>
이 타입은 주어진 타입 내의 모든 속성을 읽기 전용으로 만들어준다. 즉, 객체의 속성을 수정할 수 없도록 만들어주는 역할이다.
interface User {
name: string;
age: number;
}
const user: Readonly<User> = {
name: 'Alice',
age: 30,
};
user.name = 'Bob'; // 에러! 읽기 전용 속성으로 지정되어 수정할 수 없음
Readonly<Type>
을 사용하면 코드 내에서 실수로 객체의 속성을 수정하는 것을 방지하고, 불변성을 유지하여 프로그램의 안정성을 높일 수 있다. 그러나 주의할 점은, Readonly로 만들어진 객체의 내부 속성이 참조하는 값은 변경이 가능할 수 있다. 따라서 이 값이 가변성을 가진 객체일 경우도 있으므로 신중한 사용이 필요하다.