Freigeben über


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 aus Required<...> mit allen optionalen Eigenschaften aus Partial<...>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]