RequireAtLeastOne type
RequireAtLeastOne hjälper dig att skapa en typ där minst en av egenskaperna för ett gränssnitt (kan vara vilken egenskap som helst) måste finnas.
Detta fungerar på grund av TypeScripts verktygstyper: https://www.typescriptlang.org/docs/handbook/utility-types.html Nu ska vi undersöka det:
[K in keyof T]-?
den här egenskapen (K) är endast giltig om den har samma namn som någon egenskap för T.Required<Pick<T, K>>
gör en ny typ från T med bara den aktuella egenskapen i iterationen och markerar den efter behovPartial<Pick<T, Exclude<keyof T, K>>>
gör en ny typ med alla egenskaper för T, förutom från egenskapen K.&
är det som förenar typen med endast en obligatorisk egenskap frånRequired<...>
med alla valfria egenskaper frånPartial<...>
.[keyof T]
säkerställer att endast egenskaper för T tillåts.
type RequireAtLeastOne<T> = {
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]