0Pricing
TypeScript Academy · Aula

instanceof e in na restrição de tipos

Restrinja instâncias de classes e formatos de objetos

instanceof e in na restrição de tipos é 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.

Boas-vindas

`instanceof` refina instâncias de classes, e `in` refina tipos de objeto com base na presença de propriedades. Ambos são essenciais para trabalhar com uniões complexas.

Refinamento com instanceof

Use `instanceof` para verificar se um valor é uma instância de uma classe. TypeScript refina o tipo para essa classe.
function handle(err: Error | string) {
  if (err instanceof Error) {
    console.log(err.message); // err: Error
  } else {
    console.log(err); // err: string
  }
}

instanceof com classes personalizadas

instanceof também funciona com suas próprias classes.
class Dog { bark() { return 'Woof'; } }
class Cat { meow() { return 'Meow'; } }
function speak(pet: Dog | Cat) {
  if (pet instanceof Dog) pet.bark();
  else pet.meow();
}

instanceof não funciona com interfaces

As interfaces são eliminadas durante a execução. Não pode usar instanceof com uma interface, apenas com classes.

O operador in

Use `in` para verificar se uma propriedade existe em um objeto. TypeScript refina a união para os membros que têm essa propriedade.
type Fish = { swim(): void };
type Bird = { fly(): void };
function move(animal: Fish | Bird) {
  if ('swim' in animal) animal.swim();
  else animal.fly();
}

Refinamento com in e propriedades opcionais

`in` também faz refinamento para propriedades opcionais: ele refina a união para os membros nos quais a propriedade PODE existir.
type A = { x?: number };
type B = { y: number };
function process(v: A | B) {
  if ('x' in v) {
    // v: A (has optional x)
  }
}

Combinação de instanceof e in

Pode combinar as duas técnicas de refinamento para fazer uma discriminação complexa de tipos.
function describe(v: Error | { message: string }) {
  if (v instanceof Error) console.log('Error:', v.stack);
  else if ('message' in v) console.log('Object:', v.message);
}

in para uniões discriminadas

Quando os membros da união não têm um discriminador, as verificações com `in` podem cumprir a mesma finalidade de refinamento.
type Square = { side: number };
type Circle = { radius: number };
function area(s: Square | Circle): number {
  return 'side' in s ? s.side ** 2 : Math.PI * s.radius ** 2;
}

instanceof em blocos catch

Use instanceof em blocos catch para distinguir tipos de erro.
try {
  await fetchData();
} catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else throw err;
}

Verificação com Object.prototype versus in

Tanto `key in obj` quanto `Object.prototype.hasOwnProperty.call(obj, key)` verificam a existência de uma propriedade, mas `in` também encontra propriedades herdadas.

Prioridade do refinamento

Quando várias verificações de refinamento se aplicam, TypeScript faz a interseção dos tipos refinados, obtendo o tipo mais específico possível.

Verificação rápida

Por que não pode usar `instanceof` para refinar um tipo de interface em TypeScript?

Recapitulação

`instanceof` refina instâncias de classes durante a execução. `in` refina uniões de objetos com base na existência de propriedades. Use ambos ao trabalhar com hierarquias de classes e uniões de objetos estruturais.

Perguntas Frequentes

A aula “instanceof e in na restrição de tipos” é grátis?

Sim — o texto completo de “instanceof e in na restrição de tipos” é 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 “instanceof e in na restrição de tipos”?

Restrinja instâncias de classes e formatos de objetos 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 “instanceof e in na restrição de tipos”?

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. typeof e restrição por veracidade
  2. instanceof e in na restrição de tipos
  3. Funções de guarda de tipos definidas pelo usuário
  4. Verificação de exaustividade com never
← Voltar para TypeScript Academy