0Pricing
TypeScript Academy · Aula

TupleToUnion e UnionToIntersection

Converta programaticamente entre tuplas e uniões

TupleToUnion e UnionToIntersection é 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.

TupleToUnion: o conceito

TupleToUnion converte um tipo de tupla em uma união de seus tipos de elemento — o inverso de construir uma tupla a partir de tipos individuais.

type TupleToUnion<T extends readonly any[]> = T[number];
type A = TupleToUnion<[string, number, boolean]>; // string | number | boolean

Como T[number] funciona

Indexar uma tupla com number acessa todos os índices numéricos de uma só vez, o que o TypeScript expressa como uma união de tipos de elemento.

type Tuple = [string, number, boolean];
type Elements = Tuple[number]; // string | number | boolean

TupleToUnion com vetores constantes

Combine com vetores as const para derivar uniões a partir de vetores de valores.

const COLORS = ["red", "green", "blue"] as const;
type Color = typeof COLORS[number]; // "red" | "green" | "blue"

UnionToIntersection: o conceito

Converter uma união em uma interseção é mais difícil e exige tipos condicionais distributivos com tipos de função para reunir todos os membros.

type UnionToIntersection<U> =
  (U extends any ? (x: U) => void : never) extends (x: infer I) => void
    ? I
    : never;

Por que a técnica das funções funciona

A distribuição sobre os membros de uma união envolve cada um em um tipo de função. O TypeScript então infere a interseção de todos os tipos de parâmetro para satisfazer a restrição estrutural.

type A = UnionToIntersection<{ a: 1 } | { b: 2 }>;
// { a: 1 } & { b: 2 }

UnionToTuple: um problema difícil

Converter uma união em uma tupla é teoricamente possível, mas depende da ordem de avaliação, que o TypeScript não garante — evite essa abordagem em produção.

// Not reliable — union member order is unspecified
// Use TupleToUnion (safe) not UnionToTuple (fragile)

Uso prático de TupleToUnion

Extraia todas as chaves válidas de uma tupla de literais de cadeia de caracteres para criar um tipo união para validação.

const ALLOWED_METHODS = ["GET", "POST", "PUT", "DELETE"] as const;
type HttpMethod = typeof ALLOWED_METHODS[number];
function request(method: HttpMethod) { /* ... */ }

Uso prático de UnionToIntersection

Mescle várias interfaces de composição de uma união em um único tipo combinado.

type Mixin1 = { log(): void };
type Mixin2 = { save(): Promise<void> };
type Combined = UnionToIntersection<Mixin1 | Mixin2>;
// { log(): void } & { save(): Promise<void> }

Interseção de tipos primitivos

Fazer a interseção de tipos primitivos não relacionados produz never, pois nenhum valor pode ser simultaneamente string e number.

type X = UnionToIntersection<string | number>; // never

Usando esses tipos em restrições genéricas

Combine TupleToUnion e UnionToIntersection dentro de restrições genéricas para criar APIs flexíveis e seguras quanto aos tipos.

function merge<T extends object[]>(...args: T): UnionToIntersection<T[number]> {
  return Object.assign({}, ...args) as any;
}

Recapitulação: tupla ↔ união ↔ interseção

TupleToUnion usa a indexação T[number]. UnionToIntersection usa a técnica da função distributiva com infer. Ambos são ferramentas essenciais para a manipulação avançada de tipos.

Verificação rápida

O que é TupleToUnion<[string, number]>?

O que você aprendeu

TupleToUnion usa a indexação numérica para extrair uniões de elementos de tuplas. UnionToIntersection usa a técnica da função distributiva. Esses são padrões fundamentais para a manipulação avançada de tipos do TypeScript.

Perguntas Frequentes

A aula “TupleToUnion e UnionToIntersection” é grátis?

Sim — o texto completo de “TupleToUnion e UnionToIntersection” é 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 “TupleToUnion e UnionToIntersection”?

Converta programaticamente entre tuplas e uniões 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 “TupleToUnion e UnionToIntersection”?

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. DeepPartial e DeepReadonly
  2. Utilitários Flatten e UnwrapPromise
  3. TupleToUnion e UnionToIntersection
  4. Publicando uma biblioteca de utilitários de tipos
← Voltar para TypeScript Academy