Uniões discriminadas para correspondência segura de padrões
Adicione um campo literal comum aos membros da união para garantir a segurança dos tipos
Uniões discriminadas para correspondência segura de padrões é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 3 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
A propriedade discriminadora
type Circle = { kind: 'circle'; radius: number };
type Square = { kind: 'square'; side: number };
type Shape = Circle | Square;Refinamento com verificações if
function area(shape: Shape): number {
if (shape.kind === 'circle') {
return Math.PI * shape.radius ** 2;
}
return shape.side ** 2; // narrowed to Square
}Refinamento com switch/case
function describe(shape: Shape): string {
switch (shape.kind) {
case 'circle': return `Circle r=${shape.radius}`;
case 'square': return `Square s=${shape.side}`;
}
}Exaustividade com never
function area(shape: Shape): number {
switch (shape.kind) {
case 'circle': return Math.PI * shape.radius ** 2;
case 'square': return shape.side ** 2;
default:
const _exhaustive: never = shape;
throw new Error('Unhandled shape');
}
}Padrão de tipo Resultado
type Ok<T> = { ok: true; value: T };
type Err = { ok: false; error: string };
type Result<T> = Ok<T> | Err;Padrão de tipo de ação (no estilo Redux)
type Action =
| { type: 'INCREMENT'; amount: number }
| { type: 'DECREMENT'; amount: number }
| { type: 'RESET' };Várias propriedades discriminadoras
type AdminUser = { role: 'admin'; permissions: string[] };
type RegularUser = { role: 'user'; credits: number };
type User = AdminUser | RegularUser;Uniões não discriminadas também podem ser refinadas
type StringOrArr = string | string[];
function flatten(val: StringOrArr): string[] {
return Array.isArray(val) ? val : [val];
}Uniões discriminadas versus hierarquias de classes
Exemplo real: união de respostas HTTP
type ApiState<T> =
| { status: 'loading' }
| { status: 'success'; data: T }
| { status: 'error'; message: string };Verificação rápida
Recapitulação
Perguntas Frequentes
A aula “Uniões discriminadas para correspondência segura de padrões” é grátis?
Sim — o texto completo de “Uniões discriminadas para correspondência segura de padrõ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 4 aulas no total.
O que vou aprender em “Uniões discriminadas para correspondência segura de padrões”?
Adicione um campo literal comum aos membros da união para garantir a segurança dos tipos 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 4.
Quanto tempo leva a aula “Uniões discriminadas para correspondência segura de padrõ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
- Tipos união: A ou B
- Tipos interseção: A e B
- Uniões discriminadas para correspondência segura de padrões
- Padrões práticos com uniões e interseções