본문 바로가기
STUDY/typescript

[타입스크립트] 유틸리티 타입

by 3급우사기 2024. 9. 26.

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

 

Documentation - Utility Types

Types which are globally included in TypeScript

www.typescriptlang.org

 

'STUDY > typescript' 카테고리의 다른 글

[error]Styled-component typescript에서 Props 쓰기  (0) 2024.03.11
[error]Typescript image import 안되는 현상  (0) 2024.03.10
TypeScript 정리  (0) 2024.03.09