0Pricing
TypeScript Academy · Aula

O Operador de Tipo keyof

Obtenha uma união das chaves de um tipo de objeto com keyof.

O Operador de Tipo keyof é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.

As keys de um tipo

O operador keyof recebe um tipo de objeto e produz uma união das keys de suas propriedades. Ele é a base do acesso seguro a propriedades e dos utilitários genéricos para keys.

keyof básico

Aplique keyof a uma interface para obter uma união dos nomes de suas keys como tipos literais de cadeia de caracteres.

interface User {
  id: number
  name: string
}
type UserKeys = keyof User // "id" | "name"
const k: UserKeys = "name"
console.log(k)

Apenas keys válidas são permitidas

Uma variável tipada como keyof T pode conter apenas uma das keys reais de T. Erros de digitação e keys inválidas são detectados em tempo de compilação.

interface User { id: number; name: string }
const valid: keyof User = "id"
// const bad: keyof User = "email" // Error: not a key of User
console.log(valid)

keyof com typeof

Combine com typeof para obter as keys do tipo inferido de um valor. Aqui, obtemos as keys de um objeto de configuração sem escrever uma interface.

const config = { host: "localhost", port: 8080 }
type ConfigKey = keyof typeof config // "host" | "port"
const key: ConfigKey = "port"
console.log(config[key])

keyof de uma assinatura de índice de cadeia de caracteres

Para um tipo com uma assinatura de índice de cadeia de caracteres, keyof é string | number — porque qualquer key textual é permitida e as keys numéricas são convertidas em cadeias de caracteres.

type Dict = { [key: string]: number }
type DictKeys = keyof Dict // string | number
const k: DictKeys = "anything"
console.log(k)

keyof de uma assinatura de índice numérico

Para uma assinatura de índice numérico, keyof é apenas number. Isso corresponde à forma como os vetores expõem índices numéricos.

type NumDict = { [i: number]: string }
type NumKeys = keyof NumDict // number
const k: NumKeys = 0
console.log(k)

keyof de um tipo de vetor

Aplicar keyof a um tipo de vetor produz uma união surpreendente: índices numéricos, além de todos os nomes de métodos e propriedades do vetor, como length e push.

type ArrKeys = keyof string[]
// number | "length" | "push" | "map" | ... many more
const k: ArrKeys = "length"
console.log(k)

Iterando sobre keys com segurança

Use keyof para escrever laços que acessam apenas keys válidas. Converter Object.keys para (keyof T)[] mantém o acesso indexado seguro quanto aos tipos.

interface User { id: number; name: string }
const u: User = { id: 1, name: "Ada" }
const keys = Object.keys(u) as (keyof User)[]
for (const k of keys) console.log(k, u[k])

keyof em restrições genéricas

Um parâmetro genérico de key normalmente é restringido com K extends keyof T. Isso garante que a key realmente exista no objeto.

function pluck<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key]
}
const name = pluck({ id: 1, name: "Ada" }, "name")
console.log(name) // Ada

Combinando várias keys

Como keyof T é uma união, você pode fazer interseções ou filtrá-la. Aqui, uma função aceita um vetor de keys válidas.

function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
  const out = {} as Pick<T, K>
  for (const k of keys) out[k] = obj[k]
  return out
}
console.log(pick({ a: 1, b: 2, c: 3 }, ["a", "c"]))

Por que keyof é importante

keyof transforma nomes de propriedades em um tipo verificável, permitindo criar acessadores, modificadores e transformadores genéricos que não podem fazer referência a uma key inexistente. Ele aparece em toda parte no TypeScript avançado.

interface Settings { theme: string; size: number }
function has<T>(obj: T, key: keyof T): boolean {
  return key in (obj as object)
}
console.log(has<Settings>({ theme: "x", size: 1 }, "theme"))

Verificação rápida

Teste sua compreensão do operador keyof.

Recapitulação

keyof T produz uma união das keys de propriedades de T como tipos literais, restringindo as variáveis a keys válidas. Ele retorna string | number para assinaturas de índice de cadeia de caracteres e number para assinaturas de índice numérico. Combinado com typeof, deriva keys a partir de valores; combinado com genéricos (K extends keyof T), possibilita acessadores, seletores e iteração seguros quanto aos tipos.

Perguntas Frequentes

A aula “O Operador de Tipo keyof” é grátis?

Sim — o texto completo de “O Operador de Tipo keyof” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.

O que vou aprender em “O Operador de Tipo keyof”?

Obtenha uma união das chaves de um tipo de objeto com keyof. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar TypeScript Academy?

Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “O Operador de Tipo keyof”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de TypeScript Academy?

Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O Operador de Tipo typeof
  2. O Operador de Tipo keyof
  3. Tipos de Acesso Indexado
  4. Combinando typeof e keyof
← Voltar para TypeScript Academy