Saltar al contenido
Extraer una propiedad tipada de objetos

    ↑↓ mover · ⏎ abrir · esc cerrar

    Patrones

    ¿Cómo selecciono una propiedad de cada objeto y conservo su tipo en el array devuelto?

    Vincula la clave a `keyof T` y usa acceso indexado para el elemento de retorno.

    La receta

    function pluck<T, K extends keyof T>(
      items: readonly T[],
      key: K,
    ): T[K][] {
      return items.map(item => item[key])
    }
    
    const people = [
      { id: 1, name: 'Ada' },
      { id: 2, name: 'Lin' },
    ]
    
    const names = pluck(people, 'name')
    const ids = pluck(people, 'id')

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

    Cómo funciona

    1. 01
      K extends keyof T

      La propiedad elegida debe existir en cada elemento descrito por `T`.

    2. 02
      T[K][]

      La clave elegida determina el tipo de elemento del array devuelto.

    Lo que obtienes

    Dónde falla

    Para una unión de objetos distintos, `keyof T` contiene solo claves seguras en todos. Estrecha la unión primero o modela una operación discriminada para claves específicas de rama.

    Conclusión

    Correlaciona un parámetro clave con `T[K]` cuando elegir propiedad determine el resultado.

    Véase también

    Patrones