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
ConfigKeydeve ser derivado deconfigcomkeyof typeof. - A função
mostrarChavedeve aceitar apenas chaves válidas deconfig. - 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
- Declaramos
configcomo um objeto literal com três propriedades. typeof configcaptura o tipo inferido do objeto:{ tema: string; idioma: string; notificacoes: boolean }.keyofaplicado a esse tipo gera a união"tema" | "idioma" | "notificacoes", que é atribuída aConfigKey.- A função
mostrarChaverecebe um parâmetro do tipoConfigKey, garantindo que apenas chaves existentes sejam passadas. - Dentro da função, usamos template string para imprimir o formato pedido.
- 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 porqueconfigé 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
keyofdiretamente no valor:keyof configé inválido; é precisokeyof 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