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í zRequired<...>se všemi volitelnými vlastnostmi zPartial<...>. -
[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]