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 vereistPartial<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 vanRequired<...>
met alle optionele eigenschappen vanPartial<...>
.[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]