TypeScript

[TS] TypeScript 유틸리티 타입이란?

dev_sihyun 2025. 3. 18. 10:21
반응형

TypeScript 유틸리티 타입

TypeScript의 유틸리티 타입은 기존 타입을 변환하여 새로운 타입을 생성하는 도구입니다. 이를 통해 코드 재사용성을 높이고 타입 정의를 간결하게 할 수 있습니다.

주요 유틸리티 타입

1. Partial<T>

  • 타입 T의 모든 속성을 선택적(optional)으로 만듭니다.
interface User { id: number; name: string; }
type PartialUser = Partial<User>; // { id?: number; name?: string; }

2. Required<T>

  • Partial의 반대로, 모든 선택적 속성을 필수로 만듭니다.
interface Config { debug?: boolean; mode?: string; }
type RequiredConfig = Required<Config>; // { debug: boolean; mode: string; }

3. Readonly<T>

  • 모든 속성을 읽기 전용으로 만듭니다.
interface Todo { title: string; }
type ReadonlyTodo = Readonly<Todo>; // { readonly title: string; }

4. Record<K, T>

  • 키 타입 K, 값 타입 T로 객체 타입을 생성합니다.
type PageInfo = Record<string, number>; // { [key: string]: number }

5. Pick<T, K>

  • T에서 K로 지정된 속성만 선택합니다.
interface User { id: number; name: string; email: string; }
type UserBasic = Pick<User, 'id' | 'name'>; // { id: number; name: string; }

6. Omit<T, K>

  • T에서 K로 지정된 속성을 제외합니다.
interface User { id: number; name: string; email: string; }
type UserWithoutEmail = Omit<User, 'email'>; // { id: number; name: string; }

7. Exclude<T, U>

  • T에서 U에 할당할 수 있는 타입을 제외합니다.
type T = string | number | boolean;
type NonBoolean = Exclude<T, boolean>; // string | number

8. Extract<T, U>

  • T에서 U에 할당할 수 있는 타입만 추출합니다.
type T = string | number | boolean;
type StringOrNumber = Extract<T, string | number>; // string | number

9. NonNullable<T>

  • T에서 null과 undefined를 제외합니다.
type T = string | null | undefined;
type NonNullString = NonNullable<T>; // string

10. ReturnType<T>

  • 함수 타입 T의 반환 타입을 추출합니다.
function greet() { return "Hello"; }
type GreetReturn = ReturnType<typeof greet>; // string

11. Parameters<T>

  • 함수 타입 T의 매개변수 타입을 추출합니다.
function greet(name: string, age: number) { return `${name}, ${age}`; }
type GreetParams = Parameters<typeof greet>; // [string, number]

12. InstanceType<T>

  • 생성자 함수 타입 T의 인스턴스 타입을 추출합니다.
class Person { name: string; }
type PersonInstance = InstanceType<typeof Person>; // Person

13. ThisParameterType<T>

  • 함수 타입 T의 this 매개변수 타입을 추출합니다.

14. OmitThisParameter<T>

  • 함수 타입 T에서 this 매개변수를 제거합니다.

15. Uppercase<S>, Lowercase<S>, Capitalize<S>, Uncapitalize<S>

  • 문자열 리터럴 타입을 변환합니다.
type UppercaseHello = Uppercase<'hello'>; // "HELLO"

이러한 유틸리티 타입들을 조합하여 복잡한 타입을 간결하게 표현할 수 있으며, 코드의 타입 안전성과 유지보수성을 크게 높일 수 있습니다.

반응형