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]