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 async e retornar Promise<string>.
  • Deve usar await em 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

  1. Declaramos async function getGreeting(name: string): Promise<string> — o tipo de retorno é explicitamente Promise<string>.
  2. Dentro, criamos uma promise que resolve após 100ms usando setTimeout; isso simula uma operação assíncrona real.
  3. Usamos await nessa promise para pausar a execução até que ela resolva.
  4. Retornamos a string formatada com template literal.
  5. 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 async na declaração: function getGreeting(): Promise<string> { ... } gera erro de compilação porque await só é permitido em funções async.
  • Retornar name em vez de Olá, ${name}! — o tipo ainda é string, mas a saída fica incorreta.
  • Não usar await na promise interna: a função retornaria antes do atraso terminar, mas o resultado ainda seria o mesmo; porém, sem await, 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!