Megosztás a következőn keresztül:


RequireAtLeastOne type

A RequireAtLeastOne segít létrehozni egy olyan típust, amelyben egy interfész (bármely tulajdonság) legalább egy tulajdonságának léteznie kell.

Ez a TypeScript segédprogramtípusai miatt működik: https://www.typescriptlang.org/docs/handbook/utility-types.html Vizsgáljuk meg:

  • [K in keyof T]-? ez a tulajdonság (K) csak akkor érvényes, ha a neve megegyezik a T bármely tulajdonságával.
  • Required<Pick<T, K>> új típust hoz létre a T-ből, csak az aktuális tulajdonsággal az iterációban, és kötelezőként jelöli meg
  • Partial<Pick<T, Exclude<keyof T, K>>> új típust hoz létre a T összes tulajdonságával, kivéve a K tulajdonságot.
  • & az a típus, amely egyetlen kötelező tulajdonsággal Required<...> egyesíti a típust a következő választható tulajdonsággal: Partial<...>.
  • [keyof T] biztosítja, hogy csak a T tulajdonságai legyenek engedélyezve.
type RequireAtLeastOne<T> = {
  [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]