Udostępnij za pośrednictwem


RequireAtLeastOne type

RequireAtLeastOne pomaga utworzyć typ, w którym wymagana jest co najmniej jedna z właściwości interfejsu (może być dowolną właściwością).

Działa to z powodu typów narzędzi języka TypeScript: Przyjrzyjmy się temu: https://www.typescriptlang.org/docs/handbook/utility-types.html

  • [K in keyof T]-? ta właściwość (K) jest prawidłowa tylko wtedy, gdy ma taką samą nazwę jak dowolna właściwość T.
  • Required<Pick<T, K>> tworzy nowy typ z języka T z tylko bieżącą właściwością w iteracji i oznacza go zgodnie z wymaganiami
  • Partial<Pick<T, Exclude<keyof T, K>>> tworzy nowy typ ze wszystkimi właściwościami T, z wyjątkiem właściwości K.
  • & to, co łączy typ z tylko jedną wymaganą właściwością z Required<...> wszystkich opcjonalnych właściwości z Partial<...>.
  • [keyof T] zapewnia, że dozwolone są tylko właściwości języka T.
type RequireAtLeastOne<T> = {
  [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]