Przejdź do treści
Wymagaj dokładnie jednej właściwości

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Wzorce

    Jak przyjąć jeden klucz wyszukiwania, odrzucając pustą kwerendę i kwerendę z kilkoma kluczami?

    Zbuduj wariant dla każdego klucza: wymagaj go i zabroń wszystkich pozostałych przez opcjonalne `never`.

    Przepis

    type ExactlyOne<T> = {
      [K in keyof T]:
        Required<Pick<T, K>> &
        Partial<Record<Exclude<keyof T, K>, never>>
    }[keyof T]
    
    type Search = ExactlyOne<{
      id: string
      email: string
      handle: string
    }>

    Build to kompiluje i sprawdza każdy wynik poniżej.

    Jak to działa

    1. 01
      Required<Pick<T, K>>

      Bieżący wariant wymaga wybranego klucza.

    2. 02
      Partial<Record<Exclude<keyof T, K>, never>>

      Każdy niewybrany klucz jest opcjonalny, ale zabroniony, gdy się pojawi.

    Co dostajesz

    Gdzie to zawodzi

    Podobnie jak `AtLeastOne`, tworzy jeden składnik unii na klucz. Utrzymuj mały obiekt źródłowy, bo komunikaty i praca edytora szybko rosną.

    Wniosek

    Wymagaj wybranego klucza, zabroń reszty, a potem zindeksuj mapowaną tabelę, by utworzyć unię.

    Zobacz też

    Wzorce