TypeScript Academy · Aula

Casos práticos de uso de infer: desembrulhando Promises

Desembrulhe tipos Promise, Array e wrappers personalizados

Aula 4 de 413 etapas

Casos práticos de uso de infer: desembrulhando Promises é 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.

O problema de desembrulhar

Ao trabalhar com código assíncrono, você frequentemente recebe Promise e precisa do T subjacente. A palavra-chave infer torna essa extração reutilizável.

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

Tipo utilitário Awaited integrado

O TypeScript 4.5 introduziu o Awaited integrado, que lida recursivamente com promessas aninhadas.

type A = Awaited<Promise<Promise<string>>>; // string
// Handles arbitrary nesting automatically

Desembrulhamento com profundidade personalizada

Antes de Awaited ser integrado, os desenvolvedores usavam tipos recursivos com infer para desembrulhar promessas.

type DeepAwaited<T> =
  T extends Promise<infer U> ? DeepAwaited<U> : T;
type A = DeepAwaited<Promise<Promise<number>>>; // number

Desembrulhamento de elementos de matrizes

O mesmo padrão infer extrai o tipo de elemento de uma matriz, de forma equivalente à abordagem integrada T[number].

type Element<T> = T extends (infer U)[] ? U : never;
type A = Element<string[]>; // string
type B = Element<number[]>; // number

Desembrulhamento de tipos Observable

Para Observables do RxJS, infer extrai o tipo emitido.

type ObservableType<T> = T extends Observable<infer U> ? U : never;
type A = ObservableType<Observable<User>>; // User

Desembrulhamento do retorno de funções

Combine ReturnType e Awaited para obter o valor resolvido de uma função assíncrona.

async function getUser(): Promise<User> { /* ... */ }
type UserResult = Awaited<ReturnType<typeof getUser>>; // User

Desembrulhamento de encapsuladores aninhados

Você pode encadear infer para lidar com tipos envolvidos em várias camadas, como Promise>.

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

Desembrulhamento condicional com base no formato

Use infer para desembrulhar condicionalmente apenas determinados tipos, deixando os outros inalterados.

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

type A = MaybeUnwrap<Promise<string>>;  // string
type B = MaybeUnwrap<number[]>;         // number
type C = MaybeUnwrap<boolean>;          // boolean

Encapsulador tipado para busca em uma API

Um encapsulador genérico de busca que retorna o tipo de dados resolvido é uma aplicação clássica do desembrulhamento baseado em infer.

async function fetchData<T>(url: string): Promise<T> {
  const res = await fetch(url);
  return res.json() as T;
}
type UserData = Awaited<ReturnType<typeof fetchData<User>>>; // User

Desembrulhamento seguro contra erros

O padrão Result combinado com infer permite extrair o tipo de sucesso de uma união discriminada.

type Ok<T> = { ok: true; value: T };
type Err = { ok: false; error: string };
type ExtractOk<T> = T extends Ok<infer V> ? V : never;
type A = ExtractOk<Ok<number> | Err>; // number

Recapitulação: desembrulhamento com infer

A palavra-chave infer é um canivete suíço para extrair tipos de encapsuladores — Promises, matrizes, Observables e tipos Result. O Awaited integrado lida com o desembrulhamento assíncrono; use tipos personalizados para outras estruturas.

Verificação rápida

Qual é a melhor maneira de obter o tipo do valor resolvido de uma função assíncrona?

O que você aprendeu

O desembrulhamento baseado em infer é uma ferramenta prática para código assíncrono em TypeScript. Use o Awaited integrado para promessas e crie tipos personalizados de desembrulhamento para matrizes, Observables e padrões Result.

Grátis para começar

Aprenda TypeScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
101
Aulas
352

Perguntas Frequentes

A aula “Casos práticos de uso de infer: desembrulhando Promises” é grátis?

Sim — o texto completo de “Casos práticos de uso de infer: desembrulhando Promises” é 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 “Casos práticos de uso de infer: desembrulhando Promises”?

Desembrulhe tipos Promise, Array e wrappers personalizados 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 “Casos práticos de uso de infer: desembrulhando Promises”?

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