共用方式為


RequireAtLeastOne type

RequireAtLeastOne 有助於建立類型,其中至少一個介面的屬性(可以是任何屬性)必須存在。

這是因為 TypeScript 的公用程式類型:https://www.typescriptlang.org/docs/handbook/utility-types.html 讓我們檢查它:

  • [K in keyof T]-? 此屬性 (K) 只有在它與 T 的任何屬性同名時才有效。
  • Required<Pick<T, K>> 從 T 建立新的類型,其中只有反覆運算中的目前屬性,並將它標示為必要
  • Partial<Pick<T, Exclude<keyof T, K>>> 會建立具有 T 所有屬性的新類型,但屬性 K 除外。
  • & 是將類型與來自 Partial<...>的所有選擇性屬性 Required<...> 中只有一個必要屬性結合在一起。
  • [keyof T] 可確保只允許 T 的屬性。
type RequireAtLeastOne<T> = {
  [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]