Casos práticos de uso de infer: desembrulhando Promises
Desembrulhe tipos Promise, Array e wrappers personalizados
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>; // numberTipo 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 automaticallyDesembrulhamento 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>>>; // numberDesembrulhamento 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[]>; // numberDesembrulhamento 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>>; // UserDesembrulhamento 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>>; // UserDesembrulhamento 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[]>>; // UserDesembrulhamento 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>; // booleanEncapsulador 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>>>; // UserDesembrulhamento 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>; // numberRecapitulaçã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.
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
- 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