Delen via


RequireAtLeastOne type

Met RequireAtLeastOne kunt u een type maken waarbij ten minste één van de eigenschappen van een interface (kan een willekeurige eigenschap zijn) moet bestaan.

Dit werkt vanwege de typen hulpprogramma's van TypeScript: https://www.typescriptlang.org/docs/handbook/utility-types.html Laten we het eens bekijken:

  • [K in keyof T]-? deze eigenschap (K) is alleen geldig als deze dezelfde naam heeft als een eigenschap van T.
  • Required<Pick<T, K>> maakt een nieuw type van T met alleen de huidige eigenschap in de iteratie en markeert deze als vereist
  • Partial<Pick<T, Exclude<keyof T, K>>> maakt een nieuw type met alle eigenschappen van T, met uitzondering van de eigenschap K.
  • & is wat het type combineert met slechts één vereiste eigenschap van Required<...> met alle optionele eigenschappen van Partial<...>.
  • [keyof T] zorgt ervoor dat alleen eigenschappen van T zijn toegestaan.
type RequireAtLeastOne<T> = {
  [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]