Skip to content

TypeScript 유틸리티 타입 해설

TypeScript의 내장 유틸리티 타입과 함께 쓰이는 키워드를 작업별로 묶었습니다. 객체 재구성, 유니언 필터링, 함수 서술, 문자열 리터럴 변환, 값에서 타입 캡처. 각 행은 타입과 실제로 작성하게 되는 별칭을 보여 줍니다.

유틸리티 타입은 타입을 위한 제네릭 함수입니다. 하나 또는 두 개의 타입을 받아 새 타입을 반환하므로 모든 형태를 직접 적을 필요가 없습니다. 파생 타입에서 빛을 발합니다. 진실의 원천이 다른 타입이나 값이고, 내 타입이 그것을 자동으로 따르게 하고 싶을 때입니다. 경험칙은 복제하지 말고 파생하라는 것입니다. 원본을 바꾸면 파생 타입도 따라옵니다.

참고 표 · 22 항목
22 of 22 rows
객체 형태
모든 속성을 선택적으로 만든 T.type Update = Partial<User>
모든 속성을 필수로 만든 T.type Strict = Required<Opts>
모든 속성을 readonly로 만든 T.type Frozen = Readonly<User>
K의 키만 남긴 T.type Preview = Pick<User, "id" | "name">
K의 키를 제거한 T.type SafeUser = Omit<User, "password">
키가 K이고 값이 V인 객체.type Scores = Record<string, number>
유니언 필터링
X에 할당 가능한 멤버를 제거한 유니언 U.type NoNull = Exclude<T, null>
U 중 X에 할당 가능한 멤버.type OnlyStr = Extract<T, string>
null과 undefined를 제거한 T.type Def = NonNullable<T>
함수 타입
함수 F의 매개변수 타입 튜플.type P = Parameters<typeof fn>
함수 F가 반환하는 타입.type R = ReturnType<typeof fn>
생성자 F의 매개변수 타입 튜플.type C = ConstructorParameters<typeof Date>
생성자 F가 만들어내는 인스턴스 타입.type D = InstanceType<typeof Date>
Promise가 재귀적으로 해결되는 타입.type Data = Awaited<Promise<User>>
문자열 리터럴 변환
문자열 리터럴 S를 대문자로 변환한 것.type A = Uppercase<"abc"> // "ABC"
문자열 리터럴 S를 소문자로 변환한 것.type B = Lowercase<"ABC"> // "abc"
첫 글자를 대문자로 만든 S.type C = Capitalize<"abc"> // "Abc"
첫 글자를 소문자로 만든 S.type D = Uncapitalize<"Abc"> // "aBc"
관련 키워드
객체 타입 T의 속성 키 유니언.type K = keyof User
값의 타입. 다시 적어 쓸 필요가 없다.type Config = typeof defaults
조건부 타입 안에서 타입을 캡처해 재사용한다.type El<T> = T extends Array<infer I> ? I : never
T가 U에 할당 가능한지에 따라 X 또는 Y를 고른다.type IsStr<T> = T extends string ? true : false