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]