0Pricing
TypeScript Academy · Aula

Tipos condicionais: T extends U ? X : Y

Escreva instruções if no nível dos tipos com tipos condicionais

Tipos condicionais: T extends U ? X : Y é 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

Os tipos condicionais permitem expressar condicionais em nível de tipo. Eles são uma parte central do sistema de tipos avançado do TypeScript, usada para criar tipos utilitários.

Sintaxe básica

Escreva T extends U ? X : Y. Se T puder ser atribuído a U, o resultado será X; caso contrário, será Y.
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false

NonNullable integrado

NonNullable é implementado com um tipo condicional que remove null e undefined de T.
type NonNullable<T> = T extends null | undefined ? never : T;
type C = NonNullable<string | null>; // string

Condicionais com genéricos

Os tipos condicionais são mais úteis dentro de funções genéricas e aliases de tipo.
type Flatten<T> = T extends Array<infer I> ? I : T;
type Str = Flatten<string[]>; // string
type Num = Flatten<number>;   // number

Condicionais aninhados

Os tipos condicionais podem ser aninhados para representar uma lógica mais complexa.
type TypeName<T> =
  T extends string ? 'string' :
  T extends number ? 'number' :
  T extends boolean ? 'boolean' :
  'object';

Distribuição sobre uniões

Quando T é um parâmetro de tipo simples, um tipo condicional é distribuído pelos membros da união.
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]

Impedindo a distribuição

Envolva T em uma tupla para impedir a distribuição.
type NoDistribute<T> = [T] extends [any] ? T[] : never;
type R2 = NoDistribute<string | number>; // (string | number)[]

Usando never para filtrar

Retornar never de um tipo condicional remove membros da união.
type OnlyStrings<T> = T extends string ? T : never;
type S = OnlyStrings<'a' | 'b' | 1 | 2>; // 'a' | 'b'

Tipos condicionais em tipos mapeados

Combine tipos mapeados e tipos condicionais para transformar propriedades de objetos seletivamente.
type NullableValues<T> = { [K in keyof T]: T[K] extends string ? null : T[K] };

Inferindo a partir de parâmetros de função

Use infer em tipos condicionais para extrair partes de tipos complexos.
type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type FP = FirstParam<(a: string, b: number) => void>; // string

Utilitários condicionais integrados

Muitos utilitários integrados (ReturnType, Parameters, InstanceType) são construídos com tipos condicionais e infer.
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

Verificação rápida

Qual é o resultado de `type R = string extends object ? 'yes' : 'no'`?

Recapitulação

Os tipos condicionais (T extends U ? X : Y) permitem lógica em nível de tipo. Eles são distribuídos pelas uniões, funcionam com infer para extração e dão suporte a muitos dos tipos utilitários integrados do TypeScript.

Perguntas Frequentes

A aula “Tipos condicionais: T extends U ? X : Y” é grátis?

Sim — o texto completo de “Tipos condicionais: T extends U ? X : Y” é 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: T extends U ? X : Y”?

Escreva instruções if no nível dos tipos com tipos condicionais 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 “Tipos condicionais: T extends U ? X : Y”?

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