TypeScript Academy · Aula

Refinando uniões entre limites de funções

Mantenha a redução segura entre limites de funções usando uniões discriminadas, retornos predicado e tipos no estilo Result.

Aula 3 de 38 etapas

Refinando uniões entre limites de funções é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 3 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: manter o seu refinamento intacto entre chamadas de funções usando uniões marcadas, retornos de predicados e auxiliares de validação.

  • Zero as inseguro nos pontos de chamada
  • Os refinamentos acompanham os dados

Retorno de união marcada

Padrão de resultado: quem chama restringe o tipo verificando ok. Sem conversões, com fluxo de controle claro.

type Ok<T> = { ok: true; value: T }
type Err = { ok: false; error: string }

type Result<T> = Ok<T> | Err

function parseIntSafe(s: string): Result<number> {
  const n = Number(s)
  return Number.isFinite(n) ? { ok: true, value: n } : { ok: false, error: "NaN" }
}

function useIt(s: string) {
  const r = parseIntSafe(s)
  if (r.ok) {
    // r is Ok<number>
    return r.value * 2
  }
  // r is Err
  return `bad: ${r.error}`
}

Retorno de predicado

Os retornos de predicados (x is T) centralizam as verificações e mantêm o refinamento nos pontos de chamada.

type User = { id: number; name: string }

type MaybeUser = User | null

function hasUser(x: MaybeUser): x is User {
  return x !== null
}

function greet(x: MaybeUser) {
  if (hasUser(x)) {
    // x narrowed to User
    return `Hello ${x.name}`
  }
  return "Anonymous"
}

Encaminhamento do refinamento

Faça o refinamento com uma guarda (por exemplo, isCircle) e passe o valor adiante; as funções seguintes verão o tipo mais específico.

type Shape =
  | { kind: "circle"; radius: number }
  | { kind: "square"; size: number }

function isCircle(s: Shape): s is Extract<Shape, { kind: "circle" }> {
  return s.kind === "circle"
}

function area(s: Shape) {
  if (isCircle(s)) {
    // s is circle here
    return Math.PI * s.radius * s.radius
  }
  return s.size * s.size
}

Validar no limite

Valide no limite e retorne Válido/Inválido; quem chama restringe o tipo pela marca e obtém dados totalmente tipados.

type Payload = { email: string; retries?: number }

type Valid = { ok: true; data: Required<Payload> }
type Invalid = { ok: false; issues: string[] }

type Validation = Valid | Invalid

function validate(p: unknown): Validation {
  const issues: string[] = []
  if (typeof p !== "object" || p === null) return { ok: false, issues: ["not an object"] }
  const x = p as any
  if (typeof x.email !== "string") issues.push("email:string")
  if (x.retries !== undefined && typeof x.retries !== "number") issues.push("retries:number")
  if (issues.length) return { ok: false, issues }
  return { ok: true, data: { email: x.email, retries: x.retries ?? 0 } }
}

function handle(p: unknown) {
  const v = validate(p)
  if (!v.ok) return `bad: ${v.issues.join(",")}`
  // v.data is fully typed here
  return `send to ${v.data.email} (${v.data.retries})`
}

Dicas

Práticas recomendadas:

  • Prefira marcas pequenas e estáveis (ok, kind)
  • Centralize as verificações em auxiliares de predicados
  • Use estruturas de seleção exaustivas nos pontos de chamada
  • Evite any e conversões inseguras

Refinamento entre limites

Verificação rápida: qual padrão preserva melhor o refinamento entre limites de funções?

Recapitulação

Recapitulação: transporte os refinamentos como dados (Resultado), valide nos limites e evite conversões inseguras; quem chama restringe o tipo por meio de verificações simples das marcas.

Grátis para começar

Aprenda TypeScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
101
Aulas
352

Perguntas Frequentes

A aula “Refinando uniões entre limites de funções” é grátis?

Sim — o texto completo de “Refinando uniões entre limites de funções” é 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 “Refinando uniões entre limites de funções”?

Mantenha a redução segura entre limites de funções usando uniões discriminadas, retornos predicado e tipos no estilo Result. 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 3 de 3.

Quanto tempo leva a aula “Refinando uniões entre limites de funções”?

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. Switches exaustivos e verificações com never
  2. Funções predicado e operador satisfies
  3. Refinando uniões entre limites de funções
← Voltar para TypeScript Academy