남들은 잘 쓰는 Utility types

June 04, 2022

나는 잘 안 쓰고 있는데 다른 개발자들은 잘 쓰고 있는 것들을 간단히 모아 보았다.

Exclude<UnionType, ExcludedMembers>

ExcludedMembers에 할당 가능한 멤버가 UnionType에 있으면 제외 (여집합)

type T1 = Exclude<"a" | "b" | "c", "a" | "b">;
// type T1 = "c"

Extract<Type, Union>

Union에 할당 가능한 멤버가 Type에 있으면 추출 (교집합)

type T1 = Extract<string | number | (() => void), Function>;
// type T1 = () => void

Parameters

함수 타입의 인자를 튜플 타입으로 생성

type T0 = Parameters<() => string>; // type T0 = []
type T1 = Parameters<(s: string) => void>; // type T1 = [s: string]
type T2 = Parameters<<T>(arg: T) => T>; // type T2 = [arg: unknown]

ConstructorParameters

생성자 함수 타입의 인자를 tuple이나 array로 생성

  • 생성자 함수 타입: new (...args: any): any
type T0 = ConstructorParameters<ErrorConstructor>; // type T0 = [message?: string]
type T1 = ConstructorParameters<FunctionConstructor>; // type T1 = string[]

ReturnType

함수 타입의 return 타입을 생성

declare function f1(): { a: number; b: string };
type T4 = ReturnType<typeof f1>; // type T4 = { a: number; b: string; }

InstanceType

생성자 함수의 인스턴스 타입으로 구성된 타입을 생성

class C {
  x = 0;
  y = 0;
}

type T0 = InstanceType<typeof C>; // type T0 = C

Reference

TypeScript 공식문서


Written by Rita Ahn - frontend / UX

© 2023, Built with Gatsby and Leonids theme.