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 wymaganiamiPartial<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ą zRequired<...>
wszystkich opcjonalnych właściwości zPartial<...>
.[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]