Saltar al contenido
Inferir un resultado genérico desde un callback

    ↑↓ mover · ⏎ abrir · esc cerrar

    Patrones

    ¿Cómo permito que quien llama elija entrada y transformación sin escribir argumentos de tipo?

    Coloca los parámetros de tipo donde los valores los revelan: uno en el elemento del array y otro en el retorno del callback.

    La receta

    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)

    La compilación compila esto y comprueba cada resultado de abajo.

    Cómo funciona

    1. 01
      items: readonly T[]

      El primer argumento aporta `T`; `readonly` acepta arrays mutables y de solo lectura.

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

      El contexto da la entrada al callback y su expresión de retorno aporta `U`.

    Lo que obtienes

    Dónde falla

    Un parámetro usado solo en el retorno no puede inferirse de los argumentos. Quien llama tendría que escribirlo o aceptar un valor predeterminado desligado del resultado real.

    Conclusión

    Las buenas API genéricas infieren parámetros desde valores ordinarios y usan anotaciones solo para expresar relaciones.

    Véase también

    Patrones