オブジェクトのプロパティから一部のプロパティを省略可能にしたり必須にする方法。

参考

指定プロパティだけを省略可能にする

type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
省略可能にするプロパティ名を K に定します。

type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;

type Address = {
  prefectureCode: number;
  city: string;
  address: string;
  building: string;
};

type SearchParams = PickPartial<Address, "address" | "building">;

const input: SearchParams = {
  prefectureCode: 13,
  city: "新宿区",
};

指定以外のプロパティを省略可能にする

type PartialExcept<T, K extends keyof T> = Pick<T, K> & Partial<Omit<T, K>>;
省略可能にしないプロパティ名を K に指定します。

type PartialExcept<T, K extends keyof T> = Pick<T, K> & Partial<Omit<T, K>>;

type Address = {
  prefectureCode: number;
  city: string;
  address: string;
  building: string;
};

type SearchParams = PartialExcept<Address, "prefectureCode" | "city">;

const input: SearchParams = {
  prefectureCode: 13,
  city: "新宿区",
};

指定プロパティだけを必須にする

type SomeRequired<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>
必須にするプロパティ名を K に指定します。

type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;

type AddressParams = {
  prefectureCode?: number;
  city?: string;
  address?: string;
  building?: string;
};

type InputAddress = SomeRequired<AddressParams, "prefectureCode" | "city">;

const input: InputAddress = {
  prefectureCode: 13,
  city: "新宿区",
};

指定以外のプロパティを必須にする

type RequiredExcept<T, K extends keyof T> = Pick<T, K> & Partial<Omit<T, K>>;
必須にしないプロパティ名を K に指定します。

type RequiredExcept<T, K extends keyof T> = Pick<T, K> & Partial<Omit<T, K>>;

type Address = {
  prefectureCode?: number;
  city?: string;
  address?: string;
  building?: string;
};

type SearchParams = RequiredExcept<Address, "addressquot; | "building"">;

const input: SearchParams = {
  prefectureCode: 13,
  city: "新宿区",
};