다재다능 개발자 성장기 🚀
TypeScript - 4주차(유틸리티 타입 훑어보기) 본문
Partial<T>
- Partial<T> 타입은 타입 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 });
- Person이라는 인터페이스는 name, age라는 속성으로 구성이 되어있다.
- updatePerson 함수의 2번째 인자로 Partial<Person> 타입의 fields를 받고 있다.
- 이 field라는 인자가 구성이 될 수 있는 경우의 수는 다음과 같다.
- name이라는 속성만 있어도 됩니다.
- age라는 속성만 있어도 됩니다.
- name, age라는 속성이 둘 다 있어도 됩니다.
- 이 밖의 상황은 허용하지 않는다.
- 예를 들어, { name, gender }와 같이 기존에 없는 속성을 넣어서는 안됩니다!
- 이렇게 Partial<T> 타입으로 유연하게 타입의 속성을 선택해서 객체를 만들 수 있다.
Required<T>
- Required<T> 타입과는 반대로 Required<T> 타입은 타입T의 모든 속성을 필수적으로 만든다.
- 다시 말해서, T 타입 객체에 정의된 모든 속성이 반드시 전부 제공이 되는 객체를 생성해야 할 때 쓰인다.
interface Person {
name: string;
age: number;
address?: string; // 속성 명 뒤에 붙는 ?가 뭘까요
}
address에 ? 라는 문자가 붙었기 때문에 선택적 속성이다(있어도되고 없어도 된다.)
하지만, address를 필수적으로 받아야 하는 제약사항이 있다고 하면 다음과 같이 할 수 있다.
type RequiredPerson = Required<Person>;
이렇게 하면 Required<T>타입을 통해 선언하면 address 입력도 필수가 된다.
Readonly<T>
- Readonly<T>타입은 타입 T의 속성을 읽기 전용(read-only)으로 만든다.
- 이를 통해 readonly 타입의 속성들로 구성된 객체가 아니어도 완전한 불변 객체로 취급할 수 있다.
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는 host가 readonly가 아니기 때문에 불변 객체라고 할 수 없다.
하지만, Readonly<T> 타입을 사용하여 불변 객체로 만들 수 있다!
Pick<T,K> 타입
- Pick<T,K> 유틸리티 타입은 타입 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 속성만 선택해서 구성된 새로운 타입이다.
Omit<T,K>
- Omit<T,K> 유틸리티 타입은 타입 T에서 K 속성들만 제외한 새로운 타입을 만든다.
- Pick<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 속성만 제외한 새로운 타입이다.
'TIL ⭐' 카테고리의 다른 글
TypeScript - 5주차(객체 지향 프로그램) (2) | 2024.09.03 |
---|---|
TypeScript - 4주차(enum과 object literal) (0) | 2024.08.23 |
TypeScript - 3주차(타입의 종류 2) (0) | 2024.08.17 |
TypeScript - 3주차(타입의 종류 1) (0) | 2024.08.17 |
TypeScript - 3주차(변수) (0) | 2024.08.17 |