RequireAtLeastOne type
RequireAtLeastOne hilft beim Erstellen eines Typs, bei dem mindestens eine der Eigenschaften einer Schnittstelle (kann eine beliebige Eigenschaft sein) vorhanden ist.
Dies funktioniert aufgrund der Hilfsprogrammtypen von TypeScript: https://www.typescriptlang.org/docs/handbook/utility-types.html Lassen Sie uns dies untersuchen:
-
[K in keyof T]-?
diese Eigenschaft (K) ist nur gültig, wenn sie denselben Namen wie jede Eigenschaft von T hat. -
Required<Pick<T, K>>
einen neuen Typ von T mit nur der aktuellen Eigenschaft in der Iteration erstellt und als erforderlich markiert -
Partial<Pick<T, Exclude<keyof T, K>>>
einen neuen Typ mit allen Eigenschaften von T, mit Ausnahme der Eigenschaft K. -
&
wird der Typ mit nur einer erforderlichen Eigenschaft ausRequired<...>
mit allen optionalen Eigenschaften ausPartial<...>
vereint. -
[keyof T]
stellt sicher, dass nur Eigenschaften von T zulässig sind.
type RequireAtLeastOne<T> = {
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]