TypeScript · Intermediário · Inglês · Técnico
Object.keys
Função cujo tipo devolve string[] e não (keyof T)[], de propósito, porque objetos podem ter propriedades extras em runtime. Daí a dificuldade de indexar o objeto com as chaves.
Onde usar
Aparece no clássico erro de indexar um objeto dentro de um for sobre Object.keys. A solução comum é uma asserção local para keyof typeof, ou iterar com Object.entries.
Em código
const o = { a: 1, b: 2 };
type K = keyof typeof o;
let soma = 0;
for (const k of Object.keys(o)) {
// soma += o[k]; // erro: k é string
soma += o[k as K];
}Exemplos
Object.keys returns string[], so you need a cast to index.
Object.keys retorna string[], então você precisa de um cast para indexar.
Use Object.entries and skip the Object.keys cast.
Use Object.entries e pule o cast do Object.keys.
Cuidado
Evite a asserção quando o objeto vem de fora: um objeto com chaves extras quebra a suposição, e o tipo passa a mentir.