keyof O operador keyof

Última atualização: 2026-10-22

keyof O operador keyof

keyof T coleta todas as chaves de um tipo de objeto T numa união de literais: keyof Settings é "volume" | "theme". É a pedra angular da segurança de tipos nos nomes de chave — com uma restrição genérica, um erro de digitação num argumento de chave gera erro imediato.

GrupoGenéricos
TipoOperador
Modo strictNão necessário

ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.

📝 Sintaxe

interface Settings {
  volume: number;
  theme: string;
}

type SettingKey = keyof Settings; // "volume" | "theme"

function read<T, K extends keyof T>(settings: T, key: K): T[K] {
  return settings[key];
}

⚙️ Parâmetros

keyof TA união de chaves: cada chave de T como uma união de literais (degrada para string | number quando existe uma assinatura de índice string)
K extends keyof TO par clássico: argumentos de chave ficam restritos às chaves reais
T[K]Acesso indexado: o tipo de valor daquela chave — vol é number automaticamente

Retorno:keyof é um operador de tipo, sem código em execução; T[K] liga o tipo de retorno com precisão à chave.

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

60 dark

(Saída de execução após a transpilação; um erro de digitação (como "volumn") gera um erro de compilação — K está restrito por keyof T)

💡 Observações

ℹ️ Info keyof se mantém em sincronia automaticamente: adicione um campo a Settings e a união ganha um membro — algo que escrever à mão "volume" | "theme" | "lang" jamais conseguiria.
💡 Dica keyof mais genéricos é a matéria-prima dos utility types: Pick<T, K extends keyof T>, Omit e companhia dependem dele para permitir apenas chaves reais.
⚠️ Atenção O keyof de um array inclui índices numéricos e todos os nomes de métodos de array ("length" | "push" | ...); para obter o tipo dos elementos de um array use T[number], não keyof.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P keyof typeof obj vs keyof SomeInterface?
R typeof obj primeiro transforma o valor de volta num tipo, depois pega as chaves (típico de objetos const); keyof Interface atua diretamente no tipo. Ambos produzem uniões de literais equivalentes.
P O que keyof dá num tipo com assinatura de índice?
R Para { [k: string]: boolean }, keyof é string | number — as chaves deixam de se estreitar em literais e a proteção contra erros de digitação desaparece; evite assinaturas de índice amplas quando precisar de chaves exatas.
P O que é T[K]?
R Um tipo de acesso indexado: consulte o tipo de valor de T com o tipo de chave K. Para K = "volume", T[K] é number — toda a ligação chave-tipo-de-valor é isso.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%