01. enum과 object literal을 비교해보기
enum
- enum → 간단한 상수 값의 경우 적합
- enum은 간단한 상수 값을 그룹화해서 관리를 할 때 사용. enum은 상수 값이기 때문에 각 멤버의 값이 변하면 안된다.
객체 리터럴
- object literal → 복잡한 구조 + 다양한 데이터 타입이 필요한 경우에 적합
- 키와 값의 쌍(pair)으로 구성된 객체를 정의하는 방식으로, 복잡한 구조와 다양한 데이터 타입이 필요한 경우에 적합하다.
- 어떤 타입의 값도 대입할 수 있으며, 멤버의 값이나 데이터 타입을 자유롭게 변경할 수 있다.
- 코드에서 사용하기 전에 값이 반드시 할당되므로, 런타임 에러를 방지할 수 있다.
const obj = { // const 뿐 아니라 let도 사용이 가능
a: [1,2,3],
b: 'b',
c: 4
}
02. 유틸리티 타입
https://www.typescriptlang.org/ko/docs/handbook/utility-types.html
- 1. Partial<T>
- `Partial<T>` 타입은 타입 T의 모든 속성을 선택적으로 만든다.
- 이를 통해 기존 타입의 일부 속성만 제공하는 객체를 쉽게 생성할 수 있다.
- Partial<T> 타입으로 유연하게 타입의 속성을 선택해서 객체를 만들 수 있다다
☑️ ex
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 });
예시 설명
- 인터페이스는 name, age라는 속성으로 구성
- updatePerson 함수에서 2번째 인자로 `Partial<Person>` 타입의 fields를 받는다다.
- 이 field라는 인자가 구성이 될 수 있는 경우의 수
- name이라는 속성만 있다.
- age라는 속성만 있다.
- name, age라는 속성이 둘 다 있다.
- 이 밖의 상황은 허용하지 않음
ex : `{ name, gender }`와 같이 기존에 없는 속성은 사용할 수 없음
- 2. Required<T>
- Partial<T> 타입과는 반대로 `Required<T>` 타입은 타입 T의 모든 속성을 필수적으로 만든다.
- T 타입 객체에 정의된 모든 속성이 반드시 전부 제공이 되는 객체를 생성해야 할 때 사용
☑️ ex
interface Person {
name: string;
age: number;
address?: string; // 속성 명 뒤에 붙는 ?는 있어도 되고 없어도 된다는 뜻
}
// Required<T> 타입을 통해 선언하면 address 입력도 필수가 된다.
type RequiredPerson = Required<Person>;
- 3. Readonly<T>
- `Readonly<T>` 타입은 타입 T의 모든 속성을 읽기 전용(read-only)으로 만든다. 객체의 상수화
☑️ ex
interface DatabaseConfig { // host가 readonly가 아니기에 DatabaseConfig는 불변 객체라고 할 수 없다.
host: string;
readonly port: number; // 인터페이스에서도 readonly 타입 사용 가능
}
const mutableConfig: DatabaseConfig = {
host: "localhost",
port: 3306,
};
const immutableConfig: Readonly<DatabaseConfig> = { // DatabaseConfig가 readonly 타입이 됨
host: "localhost",
port: 3306,
};
mutableConfig.host = "somewhere";
immutableConfig.host = "somewhere"; // 오류!
- 4. Pick<T, K>
- `Pick<T, K>` 유틸리티 타입은 타입 T에서 K 속성들만 선택하여 새로운 타입을 만들 때 사용
- 이를 통해 타입의 일부 속성만을 포함하는 객체를 쉽게 생성할 수 있다.
☑️ ex
interface Person {
name: string;
age: number;
address: string;
}
// SubsetPerson은 Person이라는 인터페이스에서 `name`, `age` 속성만 선택해서 구성된 새로운 타입
type SubsetPerson = Pick<Person, "name" | "age">;
const person: SubsetPerson = { name: "Spartan", age: 30 };
- 5. Omit<T, K>
- `Omit<T, K>` 유틸리티 타입은 타입 T에서 K 속성들만 제외한 새로운 타입을 만든다!
Pick<T, K> 유틸리티 타입과 반대
- 기존 타입에서 특정 속성을 제거한 새로운 타입을 생성.
☑️ ex
interface Person {
name: string;
age: number;
address: string;
}
// SubsetPerson 타입은 Person 타입에서 `address` 속성만 제외한 새로운 타입
type SubsetPerson = Omit<Person, "address">;
const person: SubsetPerson = { name: "Alice", age: 30 };
____실습2___________
'내일배움 강의 > 강의-TypeScript 문법 종합반' 카테고리의 다른 글
3주차 (1) | 2025.01.18 |
---|---|
2주차 (0) | 2025.01.17 |
nvm 설치 (0) | 2025.01.17 |