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
- 01
K extends keyof T
La propiedad elegida debe existir en cada elemento descrito por `T`.
- 02
T[K][]
La clave elegida determina el tipo de elemento del array devuelto.
Lo que obtienes
typeof names→string[]typeof ids→number[](typeof names)[number]
→string
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.
