0Pricing
TypeScript Academy · Aula

Entendendo infer em tipos condicionais

Extraia tipos internos utilizando infer em cláusulas extends

Entendendo infer em tipos condicionais é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 1 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.

O que é infer?

A palavra-chave infer aparece dentro de tipos condicionais e permite que o TypeScript capture uma variável de tipo a partir da posição correspondente, para que você possa usá-la no ramo verdadeiro.

type GetReturn<T> = T extends (...args: any[]) => infer R ? R : never;

Exemplo básico de infer

Aqui extraímos o tipo de retorno de qualquer função usando infer R.

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type A = ReturnType<() => string>;  // string
type B = ReturnType<() => number[]>; // number[]

Como infer funciona

O TypeScript compara a estrutura de T com o padrão. Se houver correspondência, a variável inferida conterá a parte correspondente. Caso contrário, o ramo falso será escolhido.

type First<T> = T extends [infer F, ...any[]] ? F : never;
type X = First<[string, number, boolean]>; // string

Inferência a partir de parâmetros genéricos

Você pode inferir o argumento de tipo de um tipo genérico, como ao extrair T de Promise.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type A = Unwrap<Promise<string>>; // string
type B = Unwrap<number>;          // number

Múltiplas variáveis infer

Você pode usar várias cláusulas infer em um único tipo condicional para capturar várias posições de uma só vez.

type Head<T> = T extends [infer H, ...infer Tail] ? H : never;
type Tail<T> = T extends [infer H, ...infer Tail] ? Tail : never;

infer em parâmetros de função

Infer também pode capturar tipos de parâmetros de função, não apenas tipos de retorno.

type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type A = FirstParam<(x: string, y: number) => void>; // string

Comportamento distributivo com infer

Quando T é uma união, os tipos condicionais, incluindo os que contêm infer, são distribuídos sobre cada membro da união.

type UnwrapAll<T> = T extends Promise<infer U> ? U : T;
type X = UnwrapAll<Promise<string> | Promise<number>>;
// string | number

infer aninhado

Você pode aninhar infer para alcançar níveis mais profundos de uma estrutura de tipo, como ao extrair o tipo de valor de uma matriz dentro de uma promessa.

type UnwrapPromiseArray<T> =
  T extends Promise<infer U>
    ? U extends (infer V)[]
      ? V
      : U
    : T;

infer com padrões de texto

Tipos literais de modelo combinados com infer permitem extrair substrings de tipos literais de texto.

type GetDomain<T extends string> =
  T extends `https://${infer Domain}` ? Domain : never;
type D = GetDomain<"https://example.com">; // "example.com"

Armadilhas comuns

Infer só funciona dentro da cláusula extends de um tipo condicional. Usá-lo em outro lugar causa um erro de compilação. Além disso, infer não está disponível no ramo falso.

// Error: infer can only appear in extends clauses
type Bad<T> = infer R; // SyntaxError

Recapitulação: infer

A palavra-chave infer permite que o TypeScript capture um fragmento de tipo a partir de uma correspondência estrutural em um tipo condicional. Ela possibilita tipos utilitários como ReturnType, Parameters e Awaited.

Verificação rápida

Onde a palavra-chave infer pode ser usada?

O que você aprendeu

A palavra-chave infer permite a correspondência de padrões no nível de tipos, extraindo fragmentos de tipo de padrões estruturais. Ela é a base de tipos utilitários poderosos e da metaprogramação segura quanto a tipos em TypeScript.

Perguntas Frequentes

A aula “Entendendo infer em tipos condicionais” é grátis?

Sim — o texto completo de “Entendendo infer em tipos condicionais” é 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 “Entendendo infer em tipos condicionais”?

Extraia tipos internos utilizando infer em cláusulas extends 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 1 de 4.

Quanto tempo leva a aula “Entendendo infer em tipos condicionais”?

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. Entendendo infer em tipos condicionais
  2. Construindo ReturnType e Parameters do zero
  3. Padrões de inferência profundamente aninhados
  4. Casos práticos de uso de infer: desembrulhando Promises
← Voltar para TypeScript Academy