Fácil TypeScript
Função async simples com tipo explícito
Enunciado
Crie uma função assíncrona getGreeting que recebe um nome (string) e retorna uma Promise<string> com a mensagem "Olá, [nome]!". Use async/await e anote o tipo de retorno explicitamente.
Requisitos
- A função deve ser declarada com
asynce retornarPromise<string>. - Deve usar
awaitem uma promise que simula atraso (ex.:setTimeout). - O retorno deve ser a string formatada com o nome.
Código inicial
// Complete a função abaixo
async function getGreeting(name: string): Promise<string> {
// seu código aqui
}
// Teste
getGreeting("Maria").then(console.log);
Saída esperada
Olá, Maria!
Ver dica
Dentro da função, crie uma promise que resolve após um tempo e use await nela. Depois retorne a string.
Mostrar solução
async function getGreeting(name: string): Promise<string> {
// Simula uma operação assíncrona com atraso de 100ms
await new Promise((resolve) => setTimeout(resolve, 100));
return `Olá, ${name}!`;
}
// Teste
getGreeting("Maria").then(console.log);
Passo a passo
- Declaramos
async function getGreeting(name: string): Promise<string>— o tipo de retorno é explicitamentePromise<string>. - Dentro, criamos uma promise que resolve após 100ms usando
setTimeout; isso simula uma operação assíncrona real. - Usamos
awaitnessa promise para pausar a execução até que ela resolva. - Retornamos a string formatada com template literal.
- No teste, chamamos a função e usamos
.then(console.log)para imprimir o resultado.
Por que funciona
A palavra-chave async faz a função retornar automaticamente uma Promise, e o valor retornado é envolvido nessa promise. O await só pode ser usado dentro de funções async e permite escrever código assíncrono de forma sequencial. A anotação Promise<string> garante que quem chamar a função saiba exatamente qual tipo será resolvido.
Erros comuns
- Esquecer o
asyncna declaração:function getGreeting(): Promise<string> { ... }gera erro de compilação porqueawaitsó é permitido em funçõesasync. - Retornar
nameem vez deOlá, ${name}!— o tipo ainda éstring, mas a saída fica incorreta. - Não usar
awaitna promise interna: a função retornaria antes do atraso terminar, mas o resultado ainda seria o mesmo; porém, semawait, o atraso não é aguardado.
Outra forma de resolver
Usar .then() em vez de async/await:
function getGreeting(name: string): Promise<string> {
return new Promise((resolve) => setTimeout(() => resolve(`Olá, ${name}!`), 100));
}
Essa forma é preferível quando você precisa apenas encadear uma única operação assíncrona, sem lógica adicional.
Saída esperada
Olá, Maria!