Sdílet prostřednictvím


RequireAtLeastOne type

RequireAtLeastOne pomáhá vytvořit typ, kde je vyžadována alespoň jedna z vlastností rozhraní (může být libovolná vlastnost).

To funguje z důvodu typů nástrojů TypeScriptu: https://www.typescriptlang.org/docs/handbook/utility-types.html Pojďme to prozkoumat:

  • [K in keyof T]-? tato vlastnost (K) je platná pouze v případě, že má stejný název jako jakákoli vlastnost T.
  • Required<Pick<T, K>> vytvoří nový typ z T pouze s aktuální vlastností v iteraci a označí ho jako povinné.
  • Partial<Pick<T, Exclude<keyof T, K>>> vytvoří nový typ se všemi vlastnostmi T s výjimkou vlastnosti K.
  • & je to, co spojuje typ pouze s jednou požadovanou vlastností z Required<...> se všemi volitelnými vlastnostmi z Partial<...>.
  • [keyof T] zajišťuje, že jsou povoleny pouze vlastnosti T.
type RequireAtLeastOne<T> = {
  [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]