Utility Composition

원본 타입 하나에서 목적별 계약을 파생한다

내장 유틸리티 타입은 원본 모델을 복사하지 않고, 화면 입력과 API 응답, 함수 계약에 맞게 다시 조립한다.

User 타입을 여러 경계에 맞게 재사용

type derivation
  1. User
  2. Update
  3. Public
  4. Params
  5. Awaited

Partial<Pick<User, "name" | "email">>

수정 폼은 바꿀 수 있는 필드만 고르고 모두 선택적으로 만든다.

Omit<User, "password">

외부 응답에서 비밀번호 같은 내부 필드를 타입 단계에서 제외한다.

Record<Page, PageInfo>

정해진 페이지 키마다 같은 형태의 메타데이터가 존재하게 한다.

Parameters와 ReturnType

핸들러의 인자와 결과 타입을 테스트, mock, 래퍼 함수가 공유한다.

Awaited<ReturnType<typeof fetchUser>>

비동기 함수가 최종적으로 resolve하는 값 타입만 꺼내 재사용한다.

런타임 영향

유틸리티 타입은 자바스크립트 객체를 바꾸지 않는다. 컴파일 단계에서 어떤 속성을 허용할지만 재구성한다.