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.
| Grupo | Genéricos |
|---|---|
| Tipo | Operador |
| Modo strict | Nã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 T | A 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 T | O 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.
🏷️ Genéricos Relacionados
💡 Casos relacionados
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.