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]>; // stringInferê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>; // numberMú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>; // stringComportamento 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 | numberinfer 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; // SyntaxErrorRecapitulaçã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
- Entendendo infer em tipos condicionais
- Construindo ReturnType e Parameters do zero
- Padrões de inferência profundamente aninhados
- Casos práticos de uso de infer: desembrulhando Promises