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.

GrupoTipos Utilitários
TipoTipo
Modo strictNã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

TQualquer 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.
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.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%