유틸리티 타입

유틸리티 타입

1. 유틸리티 타입

  • 이번엔 유틸리티 타입에 대해 알아봅시다.
  • 유틸리티 타입기존 타입을 변환하거나 새로운 타입을 생성하기 위해 사용되는 내장 타입입니다.
  • 유틸리티 타입 코드를 더 간결하고 유연하게 작성할 수 있도록 도와줍니다.

 

2. keyof

  • keyof객체의 속성 이름 집합을 가져옵니다.
  • 해당 객체의 모든 속성 이름을 포함하는 유니온 타입이 생성됩니다.
  • 다음 코드처럼 사용할 수 있습니다.
interface User {
    id: number;
    name: string;
    age: number;
    gender: "m" | "f";
}

type UserKey = keyof User; // 'id' | 'name' | 'age' | 'gender'

// UserKey의 키 값을 입력해야 함
const uk:UserKey = "id";
// const uk2:UserKey = "tel" (오류발생)

 

3. Partial<T>

  • Partial<T>제공된 타입 T의 모든 속성을 선택적으로 만듭니다.
  • 다음 예제처럼 사용할 수 있습니다.
interface User {
    id: number;
    name: string;
    age: number;
    gender: "m" | "f";
}

// User을 Partial로 감싸주면, 속성을 선택적으로 사용 가능
let admin: Partial<User> = {
    id: 1,
    name: "Kim",
};

 

4. Required<T>

  • Required<T>제공된 타입 T의 모든 속성을 필수 속성으로 만듭니다.
  • 다음 예제처럼 사용할 수 있습니다.
interface User {
    id: number;
    name: string;
    age?: number; // ?를 붙이면 선택적으로 넣을 수 있게 됨.
}

// User을 Required로 감싸주면, 속성을 필수적으로 사용해야 함.
let admin: Partial<User> = {
    id: 1,
    name: "Kim",
    age: 20,
};

 

5. Readonly<T>

  • Readonly<T>제공된 타입 T의 모든 속성을 읽기 전용으로 만듭니다.
  • 다음 예제처럼 사용할 수 있습니다.
interface User {
    id: number;
    name: string;
    age?: number;
}

// User을 Readonly로 감싸주면, 속성 값을 변경할 수 없음
let admin: Readonly<User> = {
    id: 1,
    name: "Kim",
};

admin.id = 3; // 오류 발생

 

6. Record<K, T>

  • Record<K, T>키의 타입이 K이고, 값의 타입이 T객체를 만듭니다.
  • 다음 예제처럼 사용할 수 있습니다.
type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C" | "D";

const score: Record<Grade, Score> = {
    1: "A",
    2: "B",
    3: "C",
    4: "D",
};

 

  • 다음과 같이 인터페이스를 활용할 수도 있습니다.
interface User {
    id: number;
    name: string;
    age: number;
}

function isValid(user: User) {
    const result: Record<keyof User, boolean> = {
        id: user.id > 0,
        name: user.name !== "",
        age: user.age > 0,
    };
    return result;
}

 

7. Pick<T>

  • Pick<T, K> 제공된 타입 T에서 일부 속성만 선택합니다. 속성 이름의 집합은 K라는 제네릭으로 전달됩니다.
  • 다음 예제처럼 사용할 수 있습니다.
interface User {
    id: number;
    name: string;
    age: number;
}

// User을 Pick으로 감싸주면, 일부 속성만 선택함
const admin: Pick<User, "id" | "name"> = {
    id: 0,
    name: "Kim",
};

 

8. Omit<T>

  • Omit<T> 제공된 타입 T에서 일부 속성을 제외합니다. 제외할 속성 이름의 집합은 K라는 제네릭으로 전달됩니다.
  • 다음 예제처럼 사용할 수 있습니다.
interface User {
    id: number;
    name: string;
    age: number;
    gender: "M" | "W";
}

// User을 Omit으로 감싸주면, 일부 속성을 제외함
const admin: Omit<User, "age" | "gender"> = {
    id: 0,
    name: "Kim",
};

 

9. Exclude<T, U>

  • Exclude<T, U>첫 번째로 제공된 타입 T에서 두 번째로 제공된 타입 U에 할당 가능한 모든 속성을 제외한 타입을 생성합니다.
  • 다음 예제처럼 사용할 수 있습니다.
type T = string | number | boolean;

// Exclude로 T 타입의 number와 string을 제거함
// 그래서 U 타입은 boolean만 남음
type U = Exclude<T, number | string>;

 

10. NonNullable<T>

  • NonNullable<T>제공된 타입 T에서 null undefined를 제외한 모든 타입을 가져옵니다.
  • 다음 예제처럼 사용할 수 있습니다.
type T1 = string | null | undefined | void;

// NonNullable로 T1 타입의 null과 undefined를 제거함
// 그래서 T2 타입은 string과 void만 남음
type T2 = NonNullable<T1>;

 

11. 정리하며

  • 지금까지 유틸리티 타입정의와 유형에 대해 알아보았습니다.

※ 코딩앙마님의 유튜브 강좌를 참고하였습니다.

'Front-End Study > TypeScript' 카테고리의 다른 글

TypeScript가 적용된 React 프로젝트 생성  (0) 2024.05.12
제네릭(Generics)  (0) 2024.02.20
클래스(Class)  (0) 2024.02.19
함수 (function)  (0) 2024.01.31
인터페이스 (interface)  (0) 2024.01.29