TypeScript / / 2024. 11. 3. 05:52

TypeScript 유틸리티 타입

유틸리티 타입 소개

유틸리티 타입은 타입스크립트에서 기본 제공되는 타입 변형 도구입니다. 이러한 타입을 사용하면 기존 타입을 바탕으로 새로운 타입을 쉽게 정의할 수 있으며, 특정 속성을 선택, 제거, 필수화하거나 옵션으로 변경하는 등 다양한 변형을 수행할 수 있습니다. 주요 유틸리티 타입은 PartialRequiredReadonlyRecordPickOmitExcludeExtractReturnType 등이 있습니다.


1. Partial, Required, Readonly

Partial

  • 기능: 객체 타입의 모든 속성을 **옵션(optional)**으로 변경합니다.
  • 예시:
  • type Person = { name: string; age: number };
    type PartialPerson = Partial<Person>;
    // PartialPerson 타입은 { name?: string; age?: number }와 같습니다.
    
  • 용도: 전체 속성이 필요하지 않은 객체를 임시로 정의할 때 유용합니다. 예를 들어, 일부 필드만 수정할 수 있는 객체를 표현할 때 사용할 수 있습니다.

Required

  • 기능: 객체 타입의 모든 속성을 **필수(required)**로 만듭니다.
  • 예시:
  • type Person = { name?: string; age?: number };
    type RequiredPerson = Required<Person>;
    // RequiredPerson 타입은 { name: string; age: number }와 같습니다.
    
  • 용도: 선택적 필드가 있는 타입을 필수적으로 사용해야 하는 상황에서 유용합니다.

Readonly

  • 기능: 객체 타입의 모든 속성을 **읽기 전용(read-only)**으로 만듭니다.
  • 예시:
  • type Person = { name: string; age: number };
    type ReadonlyPerson = Readonly<Person>;
    // ReadonlyPerson 타입은 { readonly name: string; readonly age: number }와 같습니다.
    
  • 용도: 객체가 수정되지 않아야 하는 상황에서 사용합니다. 예를 들어, 상수로 다뤄야 하는 객체나 불변 객체로 관리하고 싶은 경우 유용합니다.

2. Record, Pick, Omit

Record

  • 기능: 특정 키와 값을 기반으로 객체 타입을 생성합니다.
  • 형식Record<KeyType, ValueType>
  • 예시:
  • type Role = "admin" | "user" | "guest";
    type Permissions = Record<Role, string[]>;
    // Permissions 타입은 { admin: string[]; user: string[]; guest: string[] }와 같습니다.
    
  • 용도: 특정 키와 그에 대응하는 값을 매핑해야 할 때 유용합니다. 예를 들어, 여러 역할(Role)에 따른 권한 목록을 정의할 때 사용할 수 있습니다.

Pick

  • 기능: 특정 타입에서 일부 속성만 선택하여 새로운 타입을 만듭니다.
  • 예시:
  • type Person = { name: string; age: number; location: string };
    type NameAndAge = Pick<Person, "name" | "age">;
    // NameAndAge 타입은 { name: string; age: number }와 같습니다.
    
  • 용도: 큰 타입에서 필요한 속성만 선택하여 사용하고 싶을 때 유용합니다. 특히 API 응답에서 필요한 데이터만 추출해 타입을 정의할 때 활용할 수 있습니다.

Omit

  • 기능: 특정 타입에서 일부 속성을 제외하여 새로운 타입을 만듭니다.
  • 예시:
  • type Person = { name: string; age: number; location: string };
    type WithoutLocation = Omit<Person, "location">;
    // WithoutLocation 타입은 { name: string; age: number }와 같습니다.
    
  • 용도: 타입에서 특정 속성을 제거하고 싶을 때 유용합니다. 예를 들어, 민감한 정보나 불필요한 필드를 제거한 객체 타입을 정의할 때 사용됩니다.

3. Exclude, Extract, ReturnType

Exclude

  • 기능: 한 타입에서 다른 타입을 제외한 타입을 생성합니다.
  • 형식Exclude<UnionType, ExcludedMembers>
  • 예시:
  • type T = "a" | "b" | "c";
    type WithoutA = Exclude<T, "a">;
    // WithoutA 타입은 "b" | "c" 입니다.
    
  • 용도: 유니언 타입에서 특정 타입을 제거해야 할 때 유용합니다.

Extract

  • 기능: 한 타입에서 다른 타입과 겹치는 부분만 추출하여 새로운 타입을 생성합니다.
  • 형식Extract<UnionType, IncludedMembers>
  • 예시:
  • type T = "a" | "b" | "c";
    type OnlyA = Extract<T, "a">;
    // OnlyA 타입은 "a" 입니다.
    
  • 용도: 유니언 타입에서 특정 타입만 추출하여 사용할 때 유용합니다.

ReturnType

  • 기능: 함수 타입에서 반환 타입을 추출합니다.
  • 예시:
  • function getName(): string {
      return "hello";
    }
    type NameType = ReturnType<typeof getName>;
    // NameType 타입은 string 입니다.
    
  • 용도: 함수의 반환 타입을 추출하여 다른 타입에 활용하고자 할 때 유용합니다. 이를 통해 함수의 반환 타입이 변경될 때 의존하는 다른 타입도 자동으로 변경될 수 있습니다.

요약

타입스크립트 유틸리티 타입은 다음과 같은 기능을 제공하여 타입 시스템을 더욱 유연하고 강력하게 만듭니다.

  • Partial, Required, Readonly: 객체의 속성을 선택적, 필수적, 읽기 전용으로 변환합니다.
  • Record, Pick, Omit: 새로운 객체 타입을 생성하거나 기존 타입에서 특정 속성을 선택/제외하여 변형합니다.
  • Exclude, Extract, ReturnType: 유니언 타입에서 원하는 타입만 추출하거나 제외하고, 함수의 반환 타입을 추출할 수 있습니다.

이러한 유틸리티 타입을 활용하면 코드의 재사용성과 안정성을 높이면서도 타입 시스템을 더 유연하게 활용할 수 있습니다.

'TypeScript' 카테고리의 다른 글

TypeScript 조건부 타입  (1) 2024.11.03
TypeScript 타입조작하기  (0) 2024.11.02
TypeScript 제네릭2  (0) 2024.10.29
TypeScript 제네릭1  (1) 2024.10.29
TypeScript 인터페이스로 구현하는 클래스  (0) 2024.10.29
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유