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ą zRequired<...>ze wszystkimi opcjonalnymi właściwościami zPartial<...>. -
[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]