0Pricing
TypeScript Academy · Aula

in, instanceof e uniões discriminadas

Use verificações com in/propriedades, instanceof para classes e uniões discriminadas para criar ramificações seguras.

in, instanceof e uniões discriminadas é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 2 de 3. 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 3 aulas no total.

Introdução

Objetivo: praticar três proteções poderosas: a verificação de propriedade, a verificação de instância para classes e as uniões discriminadas para ramificações claras.

Operador de propriedade

O operador de propriedade refina o tipo ao verificar um nome de propriedade em tempo de execução. É excelente para uniões de literais de objeto.

type HasLength = { length: number };

function print(v: string | HasLength) {
  if ("length" in v) {
    // v is HasLength
    console.log("len:", v.length);
  } else {
    // v is string
    console.log(v.toUpperCase());
  }
}

print({ length: 3 });
print("ts");

Verificação de instância

A verificação de instância examina protótipos de valores baseados em classes. Funciona quando o construtor está disponível em tempo de execução.

class Person {
  constructor(public name: string) {}
}

function hello(x: Person | Date) {
  if (x instanceof Person) {
    console.log("Hi", x.name);
  } else {
    console.log("Year", x.getFullYear());
  }
}

hello(new Person("Ada"));
hello(new Date(2024, 0, 1));

União discriminada

Uniões discriminadas usam um rótulo literal (como kind) para fazer uma seleção clara, com refinamento completo em cada caso.

type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };

type Shape = Circle | Square;

function area(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    case "square":
      return s.size * s.size;
  }
}

console.log(area({ kind: "circle", radius: 2 }));
console.log(area({ kind: "square", size: 3 }));

Combinação de proteções

Combine verificações de rótulos com a verificação de propriedade para refinar estruturas aninhadas e acessar apenas membros seguros.

type FetchOk = { status: "ok"; data: { length: number } };
type FetchErr = { status: "error"; message: string };

type Result = FetchOk | FetchErr;

function handle(r: Result) {
  if (r.status === "ok" && "length" in r.data) {
    console.log("items:", r.data.length);
  } else {
    console.log("error:", r.message);
  }
}

handle({ status: "ok", data: { length: 5 } });
handle({ status: "error", message: "oops" });

Diretrizes

Diretrizes:

  • Use a verificação de propriedade para uniões baseadas em propriedades.
  • Use a verificação de instância com classes.
  • Use uniões discriminadas para um fluxo de controle claro.

Verificação do operador de propriedade

Verificação rápida: qual operador verifica uma propriedade em tempo de execução e refina os tipos?

Recapitulação

Recapitulação: a verificação de propriedade testa propriedades, a verificação de instância verifica classes e as uniões discriminadas permitem instruções de seleção claras e seguras quanto aos tipos.

Perguntas Frequentes

A aula “in, instanceof e uniões discriminadas” é grátis?

Sim — o texto completo de “in, instanceof e uniões discriminadas” é 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 3 aulas no total.

O que vou aprender em “in, instanceof e uniões discriminadas”?

Use verificações com in/propriedades, instanceof para classes e uniões discriminadas para criar ramificações seguras. 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 3.

Quanto tempo leva a aula “in, instanceof e uniões discriminadas”?

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, igualdade e redução por veracidade
  2. in, instanceof e uniões discriminadas
  3. Exaustividade com never (introdução)
← Voltar para TypeScript Academy