Fácil TypeScript

Acessando propriedade com segurança

Enunciado

Crie uma função genérica pluck que recebe um objeto e uma chave, e retorna o valor dessa chave. Use K extends keyof T para garantir que a chave existe no objeto.

Requisitos

  • A função deve se chamar pluck e ter dois parâmetros genéricos: T e K extends keyof T.
  • O retorno deve ser do tipo T[K].
  • O código deve compilar sem erros e imprimir o valor correto.

Código inicial

// Complete a função pluck
function pluck<T, K extends keyof T>(obj: T, key: K): T[K] {
  // Seu código aqui
}

const carro = { marca: "Fiat", ano: 2020, eletrico: false };
console.log(pluck(carro, "marca")); // Fiat

Saída esperada

Fiat
Ver dica

Dentro da função, retorne obj[key]. O tipo de retorno já está anotado como T[K].

Mostrar solução
// Função pluck: acessa uma propriedade de um objeto de forma segura.
function pluck<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key]; // TypeScript sabe que key existe em T e retorna T[K]
}

const carro = { marca: "Fiat", ano: 2020, eletrico: false };
console.log(pluck(carro, "marca")); // Fiat

Passo a passo

  1. Declaramos a função pluck com dois parâmetros genéricos: T (o tipo do objeto) e K (a chave).
  2. A constraint K extends keyof T garante que K só pode ser uma das chaves de T.
  3. O parâmetro obj é do tipo T, e key é do tipo K.
  4. O retorno é anotado como T[K], o tipo do valor da propriedade K em T.
  5. Dentro da função, obj[key] é seguro porque K é uma chave válida de T.
  6. Chamamos pluck(carro, "marca") e imprimimos o resultado.

Por que funciona

A constraint K extends keyof T impede que passemos uma chave inexistente. O acesso indexado T[K] informa ao compilador o tipo exato do valor retornado, permitindo inferência precisa.

Erros comuns

  • Tentar acessar obj[key] sem a constraint: o TypeScript reclamaria que key não pode ser usada para indexar T.
  • Passar uma chave que não existe: pluck(carro, "cor") gera erro de compilação.

Outra forma de resolver

Poderia usar Object.values ou Reflect.get, mas perderia a tipagem forte. A solução com genéricos é preferível.

Saída esperada

Fiat