Dela via


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 behov
  • Partial<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ån Required<...> med alla valfria egenskaper från Partial<...>.
  • [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]