Share via


RequireAtLeastOne type

RequireAtLeastOne hilft beim Erstellen eines Typs, in dem mindestens eine der Eigenschaften einer Schnittstelle (kann eine beliebige Eigenschaft sein) vorhanden sein muss.

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>> erstellt einen neuen Typ aus T mit nur der aktuellen Eigenschaft in der Iteration und markiert ihn als erforderlich.
  • Partial<Pick<T, Exclude<keyof T, K>>> erstellt einen neuen Typ mit allen Eigenschaften von T, mit Ausnahme der Eigenschaft K.
  • & vereint den Typ mit nur einer erforderlichen Eigenschaft aus Required<...> mit allen optionalen Eigenschaften von Partial<...>.
  • [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]