728x90
반응형
* enum : 간단한 상수 값
* object literal : 복잡한 구조 + 다양한 데이터 타입
1. enum
- 열겨형 데이터 타입
- 상수의 그룹화에 적합
- 간단한 상수값 --> 각 멤버의 값이 변하면 안된다는 조건이 있음
2. object literal
- 키 +값으로 구성된 객체
- [1,3,4],'k',7 의 값으로 바인딩 가능 --> number와 string 타입의 값만 대입 가능
- 복잡한 구조와 다양한 데이터 타입을 사용할 때 (맘대로 변경 가능)
3. 유틸리티 타입
(1) Partial<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 });
- name, age 하나씩 있어도 되고, 둘다 있어도 됨 (이 밖의 상황은 허용 안함 : gender 같은 기존에 없는 속성)
(2) Required<T>
- 모든 속성이 반드시 전부 제공
interface Person {
name: string;
age: number;
address?: string; // 속성 명 뒤에 붙는 ?가 뭘까요
}
- 변수 이름에 물음표 : 선택적 속성 => 있어도 없어도 되는 친구
- address는 필수여야해! 한다면=> ?를 지울 수 없으니까 (다른 코드에서는 어떻게 사용될지 모르니)
type RequiredPerson = Required<Person>;
- address를 강제로 필수선택으로 사용 가능
(3) ReadOnly<T>
- 완변한 불변 객체로 취급 가능
- 객체의 상수화!
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"; // 오류!
- immutableConfig는 readonly여서 오류 발생
(4) Pick<T,K>
- 찍먹하기
interface Person {
name: string;
age: number;
address: string;
}
type SubsetPerson = Pick<Person, "name" | "age">;
const person: SubsetPerson = { name: "Spartan", age: 30 };
(5) Omit<T,K>
- 생략 & 스킵
- 20가지 중에서 3가지 생략하고싶을 때 사용
interface Person {
name: string;
age: number;
address: string;
}
type SubsetPerson = Omit<Person, "address">;
const person: SubsetPerson = { name: "Alice", age: 30 };
끝.
반응형
'TypeScript' 카테고리의 다른 글
TypeScript : 클래스 (public, private, protected) (0) | 2023.12.13 |
---|---|
TypeScript : 카페 프로그램 구현 (0) | 2023.12.13 |
TypeScript : 타입 종류 & any, unknown, union (0) | 2023.12.12 |
TypeScript : 성적표 프로그램 (0) | 2023.12.12 |
TypeScript : .d.ts 파일 (0) | 2023.12.12 |