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.
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
asinseguro 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
anye 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.
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
- Switches exaustivos e verificações com never
- Funções predicado e operador satisfies
- Refinando uniões entre limites de funções