Udostępnij za pośrednictwem


RequireAtLeastOne type

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

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

  • [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 potrzebami
  • Partial<Pick<T, Exclude<keyof T, K>>> tworzy nowy typ ze wszystkimi właściwościami języka T, z wyjątkiem właściwości K.
  • & to, co łączy typ z tylko jedną wymaganą właściwością z Required<...> ze wszystkimi opcjonalnymi właściwościami z Partial<...>.
  • [keyof T] gwarantuje, że dozwolone są tylko właściwości T.
type RequireAtLeastOne<T> = {
  [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]