0Pricing
TypeScript Academy · Aula

Tipos condicionais distributivos

Entenda como as condições se distribuem pelos membros de uma união

Tipos condicionais distributivos é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 4 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

Os tipos condicionais distributivos aplicam um tipo condicional a cada membro de uma união separadamente. Esse comportamento poderoso permite transformar e filtrar uniões.

O que é a distribuição

Quando um tipo condicional tem um T genérico simples e T é uma união, o TypeScript aplica a condição a cada membro da união separadamente.
type Wrap<T> = T extends any ? { value: T } : never;
type R = Wrap<string | number>;
// = { value: string } | { value: number }

A condição essencial

A distribuição só ocorre quando T é um parâmetro de tipo genérico simples, não envolvido por outra estrutura. Envolver T em uma tupla a impede.
type Bare<T> = T extends string ? 'yes' : 'no';
type Wrapped<T> = [T] extends [string] ? 'yes' : 'no';
type B = Bare<'a' | 'b'>; // 'yes' | 'yes' = 'yes'
type W = Wrapped<'a' | 'b'>; // 'no' — treated as a tuple

Filtrando uniões com never

Retornar never no ramo falso filtra os membros da união.
type StringsOnly<T> = T extends string ? T : never;
type S = StringsOnly<string | number | boolean>; // string

Extract integrado

Extract é implementado com um tipo condicional distributivo que mantém os membros atribuíveis a U.
type Extract<T, U> = T extends U ? T : never;
type E = Extract<string | number | boolean, string | number>; // string | number

Exclude integrado

Exclude remove os membros da união atribuíveis a U.
type Exclude<T, U> = T extends U ? never : T;
type Ex = Exclude<string | number | boolean, boolean>; // string | number

Distribuição de ToArray

Aplique ToArray a cada membro da união separadamente por meio da distribuição.
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]

Caso de uso para impedir a distribuição

Às vezes, você deseja tratar a união inteira como um único argumento de tipo, sem distribuí-la.
type IsUnion<T> = [T] extends [T] ? [T] extends [Exclude<T, T>] ? false : true : false;

Tipos mapeados distributivos

Combine condicionais distributivos com tipos mapeados para transformar propriedades selecionadas.
type PickByValue<T, V> = {
  [K in keyof T as T[K] extends V ? K : never]: T[K]
};

Condicional distributivo em ReturnType

O comportamento distributivo faz com que ReturnType funcione corretamente quando T é uma união de tipos de função.
type Fn = (() => string) | (() => number);
type R = ReturnType<Fn>; // string | number

Distribuição imediata versus tardia

O TypeScript adia (não avalia) os tipos condicionais com parâmetros de tipo livres até que eles sejam resolvidos — isso é avaliação tardia.

Verificação rápida

Qual é o resultado de `type R = (string | number) extends string ? 'yes' : 'no'` quando T NÃO é um tipo genérico simples?

Recapitulação

Os tipos condicionais distributivos são aplicados a cada membro da união separadamente quando T é um parâmetro genérico simples. Isso dá suporte a Extract, Exclude e à filtragem personalizada de uniões. Envolva T em uma tupla para impedir a distribuição.

Perguntas Frequentes

A aula “Tipos condicionais distributivos” é grátis?

Sim — o texto completo de “Tipos condicionais distributivos” é 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 “Tipos condicionais distributivos”?

Entenda como as condições se distribuem pelos membros de uma união 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 4 de 4.

Quanto tempo leva a aula “Tipos condicionais distributivos”?

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. keyof e tipos de acesso indexado
  2. Restrições genéricas: restringindo parâmetros de tipo
  3. Tipos condicionais: T extends U ? X : Y
  4. Tipos condicionais distributivos
← Voltar para TypeScript Academy