Typescript 일부 키를 선택 사항으로 만들기

특정 키를 옵션으로 만드는 방법, 하드 모드(유틸리티 없음)

type ExcludeKey<T extends Record<string,unknown>, U extends keyof T>={
  [K in keyof T as K extends U ? never : K]: T[K]
} 

type MakeKeyOptional<T extends Record<string,unknown>, U extends keyof T>=ExcludeKey<T,U> & {[K in U]?:T[K]}

type A = MakeKeyOptional<{a:1,b:2,c:3},"b"|"c">

const a1:A = {a:1} // ok!
const a2:A = {a:1,b:2} // ok!
const a3:A = {a:1,b:2,c:3} // ok!
const a4:A = {b:2,c:3} // expect error!


playground

이지 모드(유틸리티 포함)

type MakeKeyOptional<T extends Record<string, unknown>, U extends keyof T> =
  Omit<T, U> & Partial<Pick<T, U>>;

좋은 웹페이지 즐겨찾기