Fácil TypeScript

Chaves de um objeto

Enunciado

Dado o objeto config abaixo, crie um tipo ConfigKey que seja a união de suas chaves usando keyof typeof. Depois, escreva uma função mostrarChave que recebe uma ConfigKey e imprime "Chave: <chave>".

Requisitos

  • O tipo ConfigKey deve ser derivado de config com keyof typeof.
  • A função mostrarChave deve aceitar apenas chaves válidas de config.
  • A saída deve seguir o formato exato Chave: <nome>.

Código inicial

const config = {
  tema: "escuro",
  idioma: "pt-BR",
  notificacoes: true,
};

// Crie o tipo ConfigKey e a função mostrarChave

Saída esperada

Chave: tema
Chave: idioma
Chave: notificacoes
Ver dica

Use keyof typeof config para obter a união das chaves. A função pode receber esse tipo e usar template string.

Mostrar solução
const config = {
  tema: "escuro",
  idioma: "pt-BR",
  notificacoes: true,
};

// Deriva a união das chaves do objeto config
type ConfigKey = keyof typeof config;

// A função só aceita chaves válidas
function mostrarChave(chave: ConfigKey): void {
  console.log(`Chave: ${chave}`);
}

mostrarChave("tema");
mostrarChave("idioma");
mostrarChave("notificacoes");

Passo a passo

  1. Declaramos config como um objeto literal com três propriedades.
  2. typeof config captura o tipo inferido do objeto: { tema: string; idioma: string; notificacoes: boolean }.
  3. keyof aplicado a esse tipo gera a união "tema" | "idioma" | "notificacoes", que é atribuída a ConfigKey.
  4. A função mostrarChave recebe um parâmetro do tipo ConfigKey, garantindo que apenas chaves existentes sejam passadas.
  5. Dentro da função, usamos template string para imprimir o formato pedido.
  6. Chamamos a função três vezes com chaves válidas, produzindo a saída esperada.

Por que funciona

keyof typeof config combina dois operadores: typeof em posição de tipo extrai o tipo do valor config, e keyof extrai as chaves desse tipo. Assim, o tipo ConfigKey é sempre sincronizado com o objeto. Se uma propriedade for adicionada ou removida, o tipo se ajusta automaticamente, evitando erros de digitação.

Erros comuns

  • Esquecer o typeof: type ConfigKey = keyof config; gera erro porque config é um valor, não um tipo.
  • Passar uma chave inexistente: mostrarChave("email") causa erro de compilação, pois "email" não pertence à união.
  • Usar keyof diretamente no valor: keyof config é inválido; é preciso keyof typeof config.

Outra forma de resolver

Poderia usar keyof Config se Config fosse uma interface explícita. Porém, derivar do valor evita duplicação e mantém a fonte única de verdade.

Saída esperada

Chave: tema
Chave: idioma
Chave: notificacoes