TypeScript는 일반적인 타입 변환을 쉽게 하기 위해서 몇 가지 유틸리티 타입을 제공한다. 이러한 유틸리티는 전역으로 사용 가능하다.
1. Partial
Partial은 모든 프로퍼티을 선택적으로 만든다. 즉, 기존의 타입에서 모든 프로퍼티들이 없어도 되는 새 타입을 만든다.
interface User {
name: string;
age: number;
address: string;
}
const updateUser = (user: Partial<User>) => {
// Partial을 사용하면 name, age, address 중 아무것도 없어도 오류가 나지 않음
console.log(user);
}
updateUser({ name: "철수" }); // OK
updateUser({}); // OK
2. Required
Required는 Partial과 반대로 모든 프로퍼티을 필수로 만든다. 원래 선택적이었던 프로퍼티들도 반드시 존재해야 하는 타입을 만들 때 사용.
interface User {
name?: string;
age?: number;
}
const mustHaveUser = (user: Required<User>) => {
console.log(user);
}
mustHaveUser({ name: "철수", age: 20 }); // OK
mustHaveUser({}); // 오류! name과 age가 필수임
3. Readonly
Readonly는 모든 프로퍼티을 읽기 전용으로 만든다. 한 번 값이 설정되면 변경할 수 없는 타입이 된다.
interface User {
name: string;
age: number;
}
const readonlyUser: Readonly<User> = {
name: "철수",
age: 20
};
readonlyUser.age = 25; // 오류! 읽기 전용이기 때문에 값을 변경할 수 없음
4. Pick
Pick은 기존 타입에서 원하는 프로퍼티들만 골라서 새 타입을 만들 때 사용.
interface User {
name: string;
age: number;
address: string;
}
const userName: Pick<User, "name"> = {
name: "철수"
};
5. Omit
Omit은 기존 타입에서 원하지 않는 프로퍼티들을 제외하고 새 타입을 만들 때 사용.
interface User {
name: string;
age: number;
address: string;
}
const userWithoutAddress: Omit<User, "address"> = {
name: "수진",
age: 20
};
6. Record
Record는 객체 타입을 만들어주는 유틸리티 타입이야. 키 타입과 값 타입을 정해서 사용할 수 있다.
const userRoles: Record<string, string> = {
"진수": "관리자",
"철수": "사용자"
};
7. Exclude
Exclude는 특정 타입에서 원하지 않는 프로퍼티을 제외할 때 사용.
type Status = "success" | "error" | "pending";
const currentStatus: Exclude<Status, "pending"> = "success"; // OK
const otherStatus: Exclude<Status, "pending"> = "pending"; // 오류! pending은 제외됐음
8. Extract
Extract는 특정 타입에서 원하는 타입만 추출할 때 사용.
type Status = "success" | "error" | "pending";
const currentStatus: Extract<Status, "success" | "error"> = "success"; // OK
정리
- Partial: 모든 속성을 선택적으로 만듦.
- Required: 모든 속성을 필수로 만듦.
- Readonly: 모든 속성을 읽기 전용으로 만듦.
- Pick: 특정 속성들만 골라서 새 타입 만듦.
- Omit: 특정 속성들을 제외하고 새 타입 만듦.
- Record: 객체 타입을 만듦 (키와 값 타입 지정).
- Exclude: 타입에서 원하는 것을 제외.
- Extract: 타입에서 원하는 것만 추출.
참고
https://www.typescriptlang.org/ko/docs/handbook/utility-types.html
'STUDY > typescript' 카테고리의 다른 글
[error]Styled-component typescript에서 Props 쓰기 (0) | 2024.03.11 |
---|---|
[error]Typescript image import 안되는 현상 (0) | 2024.03.10 |
TypeScript 정리 (0) | 2024.03.09 |