개요
기존 타입에서 일부 키들만 옵셔널로 변경하고 싶을 경우에 사용할 수 있는 타입이 필요했다.
생각 그대로 만든다고 했을 때는 아래와 같은 결과물이 나왔다.
// 기존 타입에서 유지하고 싶은 부분들 추출 & 기존 타입에서 옵셔널로 두고 싶은 부분들 추출 type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
결과
서치 해보니 더 깔끔한 대안이 있어서 이걸로 쓰기로 했다.
똑같은 키값으로 옵셔널 & 필수가 연산 시 필수가 우선순위가 더 높다.
그래서 필수에서 제거 후 옵셔널로 추가해줘야 한다.
Optional 커스텀 타입
// 전체를 옵셔널로 변경 & 기존 타입을 유지하고 싶은 것들 type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
사용법
type Test = { A: string; B: string; C: string; D?: string; }; // Optional<원본타입, 추가로 옵셔널로 두고싶은 키들 나열> type Test1 = Optional<Test, "A">; type Test2 = Optional<Test, "B" | "C">;
// 기존 타입에서 A 키를 추가로 옵셔널로 만들었다. // 그래서 B,C만 필수 키가 되었다. type Test1 = Optional<Test, "A">; const test1: Test1 = { B: '', C: '' } // 기존 타입에서 B와 C를 추가로 옵셔널로 만들었다 // foo만 필수 키가 되었다. type Test2 = Optional<Test, "B" | "C">; const test2: Test2 = { foo: '' }