Przejdź do treści
Wywnioskuj wynik generyczny z callbacku

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Wzorce

    Jak pozwolić wywołującym wybrać wejście i transformację bez zapisywania argumentów typu?

    Umieść parametry typu tam, gdzie ujawniają je wartości: jeden w elemencie tablicy, drugi w wyniku callbacku.

    Przepis

    function mapValues<T, U>(
      items: readonly T[],
      transform: (item: T) => U,
    ): U[] {
      return items.map(transform)
    }
    
    const lengths = mapValues(['a', 'four'], text => text.length)
    const flags = mapValues([1, 2], value => value > 1)

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

    Jak to działa

    1. 01
      items: readonly T[]

      Pierwszy argument dostarcza `T`; `readonly` przyjmuje tablice mutowalne i tylko do odczytu.

    2. 02
      transform: (item: T) => U

      Kontekst nadaje callbackowi wejście, a zwracane wyrażenie dostarcza `U`.

    Co dostajesz

    Gdzie to zawodzi

    Parametru typu użytego tylko w wyniku nie da się wywnioskować z argumentów. Wywołujący musieliby go zapisać albo przyjąć wartość domyślną niezwiązaną z prawdziwym wynikiem.

    Wniosek

    Dobre generyczne API wywnioskowuje parametry typu ze zwykłych wartości, a adnotacji używa tylko do wyrażania zależności.

    Zobacz też

    Wzorce