Typescript

[TypeScript] 타입들 optional하게 변형하기

차노도리 2023. 4. 27. 18:23

타입을 넘겨받고 해당 Optional하게 바꾸기

/** `T`의 모든 속성을 순회하며 optional로 수정 */
export type DeepPartial<T> = {
  [P in keyof T]?: DeepPartial<T[P]>;
};

/** 특정 key를 제외하고 optional로 변환 */
export type PartialExcept<T, K extends keyof T> = Partial<T> & Pick<T, K>;

/** 특정 key를 제외하고 모든 속성을 optional로 변환 */
export type DeepPartialExcept<T, K extends keyof T> = DeepPartial<T> & Pick<T, K>;

/** 특정 key만 optional로 변환 */
export type PartialKeys<T, K extends keyof T> = Partial<Pick<T, Extract<keyof T, K>>> & Omit<T, K> extends infer O
  ? { [P in keyof O]: O[P] }
  : never;