Médio TypeScript
Obtendo valor com tipo inferido
Enunciado
Crie uma função getValues que recebe um array de objetos e uma chave, e retorna um array com os valores dessa chave em cada objeto. Use K extends keyof T e acesso indexado T[K].
Requisitos
- A função deve se chamar
getValuese aceitaritems: T[]ekey: K. - O retorno deve ser
T[K][]. - Deve funcionar para qualquer array de objetos com a chave especificada.
Código inicial
// Complete a função getValues
function getValues<T, K extends keyof T>(items: T[], key: K): T[K][] {
// Seu código aqui
}
const usuarios = [
{ nome: "Ana", idade: 28 },
{ nome: "Bruno", idade: 32 },
];
console.log(getValues(usuarios, "nome")); // ["Ana", "Bruno"]
Saída esperada
["Ana", "Bruno"]
Ver dica
Use items.map(item => item[key]) para extrair os valores.
Mostrar solução
// getValues: extrai os valores de uma chave específica de um array de objetos.
function getValues<T, K extends keyof T>(items: T[], key: K): T[K][] {
return items.map(item => item[key]); // Mapeia cada objeto para o valor da chave
}
const usuarios = [
{ nome: "Ana", idade: 28 },
{ nome: "Bruno", idade: 32 },
];
console.log(getValues(usuarios, "nome")); // ["Ana", "Bruno"]
Passo a passo
- A função
getValuestem dois genéricos:T(tipo dos objetos) eK(chave). K extends keyof TrestringeKàs chaves deT.- O parâmetro
itemsé um array deT, ekeyé do tipoK. - O retorno é
T[K][], um array com os valores da propriedadeK. - Usamos
items.mappara transformar cada objeto no valor dekey. - Chamamos com
usuariose"nome", obtendo["Ana", "Bruno"].
Por que funciona
O map aplica item[key] a cada elemento. Como K é uma chave válida de T, o TypeScript sabe que item[key] é do tipo T[K], e o array resultante é T[K][].
Erros comuns
- Esquecer a constraint:
K extends keyof Té essencial para queitem[key]seja permitido. - Retornar
any[]em vez deT[K][]: perde a tipagem e a segurança.
Outra forma de resolver
Poderia usar um loop for e push, mas map é mais idiomático e conciso.
Saída esperada
["Ana", "Bruno"]