Awaited<T>
Última atualização: 2026-10-22
Awaited<T> Awaited
Awaited<T> espelha o efeito de await no nível de tipo: desembrulha Promise<T> em T e também expande recursivamente Promises aninhadas (Promise<Promise<T>>). Para obter "o tipo do resultado de sucesso de uma função async", Awaited<ReturnType<typeof fn>> é a combinação padrão.
| Grupo | Tipos Utilitários |
|---|---|
| Tipo | Tipo |
| Modo strict | Não necessário |
ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.
📝 Sintaxe
// implementação simplificada (a oficial também lida com thenables)
type Awaited<T> = T extends Promise<infer V> ? Awaited<V> : T;
// Uso
type User = Awaited<ReturnType<typeof fetchUser>>; // desembrulha Promise<User>
⚙️ Parâmetros
| T | Qualquer tipo: Promises (e thenables) são desembrulhados recursivamente; todo o resto passa inalterado |
|---|
Retorno:O tipo de T após o await: o tipo do valor final com toda a cadeia de Promise expandida.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
1: Ada
done
(Saída de execução após a transpilação; no nível de tipo, LoadedUser é { id: number; name: string } em vez de Promise<...> — Awaited já o desembrulhou, então user.id é diretamente acessível)
💡 Observações
ℹ️ Info Awaited é um tipo condicional recursivo: diante de um Promise, ele infere o tipo interno e recursa até restar algo que não seja Promise. É o mesmo mecanismo que o TS usa internamente para tipar expressões await.
⚠️ Atenção Awaited desembrulha apenas no nível de tipo; ele não espera por você. Esquecer o await em tempo de execução ainda entrega um objeto Promise — um tipo correto não significa que você escreveu await.
💡 Dica Combinações: Awaited<ReturnType<typeof fn>> extrai o resultado de sucesso de uma função async; no tipo de resultado de Promise.all, cada membro também é expandido por Awaited.
🏷️ Tipos Utilitários Relacionados
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Qual é a diferença entre Awaited<T> e T extends Promise<infer U>?
R Um condicional não recursivo escrito à mão desembrulha apenas uma camada e lida mal com Promise<Promise<T>> aninhadas; o Awaited oficial recursa e ainda oferece suporte a thenables (objetos com um método then personalizado). Prefira Awaited pela generalidade.
P O que acontece ao aguardar (await) um valor comum?
R Em tempo de execução, await sobre um não-Promise retorna o valor inalterado; no nível de tipo, Awaited<string> também é string. Então tipar valores possivelmente-Promise com Awaited é sempre seguro.
P Como tipar o resultado de Promise.all?
R Não é preciso escrever à mão: Promise.all sobre uma tupla retorna automaticamente a expansão Awaited de cada membro. Para referenciar o tipo, declare const results = await Promise.all([...]) e use typeof results.