Fácil TypeScript

Criando um enum de dias da semana

Enunciado

Crie um enum chamado Weekday com os valores Monday, Tuesday, Wednesday, Thursday, Friday. Em seguida, escreva uma função isWeekday(day: Weekday): boolean que retorna true para qualquer dia de segunda a sexta e false para sábado e domingo. Imprima o resultado para Weekday.Monday e Weekday.Sunday (que não existe no enum, então use Weekday.Monday e um valor inválido? Não, use apenas os existentes).

Requisitos

  • Definir enum Weekday com os cinco dias úteis.
  • Implementar isWeekday que retorna true para os dias presentes e false para outros valores (mesmo que não existam no enum).
  • Chamar isWeekday(Weekday.Monday) e isWeekday(Weekday.Friday) e imprimir os resultados.

Código inicial

// Defina o enum Weekday

// Implemente a função isWeekday

// Teste com Weekday.Monday e Weekday.Friday

Saída esperada

Monday é dia útil? true
Friday é dia útil? true
Ver dica

Lembre-se de que enums numéricos permitem valores fora do intervalo definido. A função pode verificar se o valor está entre Monday e Friday.

Mostrar solução
// Enum com os dias da semana
enum Weekday {
  Monday,   // 0
  Tuesday,  // 1
  Wednesday,// 2
  Thursday, // 3
  Friday    // 4
}

// Função que verifica se o dia é útil (Monday a Friday)
function isWeekday(day: Weekday): boolean {
  // Verifica se o valor está entre Monday (0) e Friday (4)
  return day >= Weekday.Monday && day <= Weekday.Friday;
}

// Testes
console.log(`Monday é dia útil? ${isWeekday(Weekday.Monday)}`);
console.log(`Friday é dia útil? ${isWeekday(Weekday.Friday)}`);

Passo a passo

  1. Declaramos enum Weekday sem valores explícitos; o TypeScript atribui automaticamente 0, 1, 2, 3, 4.
  2. A função isWeekday recebe um parâmetro do tipo Weekday.
  3. Dentro da função, comparamos o valor numérico do enum: day >= Weekday.Monday (0) e day <= Weekday.Friday (4).
  4. Retornamos true se estiver nesse intervalo, false caso contrário.
  5. Chamamos isWeekday com Weekday.Monday e Weekday.Friday e imprimimos o resultado com template strings.

Por que funciona

Enums numéricos em TypeScript são convertidos em objetos JavaScript com mapeamento reverso. Os valores são números sequenciais a partir de 0. A comparação numérica funciona porque os membros do enum são números. Assim, a função pode facilmente verificar se o valor está dentro do intervalo de dias úteis.

Erros comuns

  • Esquecer de exportar o enum se estiver em um módulo separado: export enum Weekday { ... }. Sem isso, o código em outro arquivo não encontrará o enum.
  • Usar Weekday.Monday como string: console.log(Weekday.Monday) imprime 0, não 'Monday'. Para obter o nome, use Weekday[Weekday.Monday].
  • Comparar com valores fora do intervalo: isWeekday(10) compila, mas retorna false; isso é aceitável, mas cuidado com a lógica.

Outra forma de resolver

Usar uma união de literais:

type Weekday = 'Monday' | 'Tuesday' | 'Wednesday' | 'Thursday' | 'Friday';
function isWeekday(day: Weekday): boolean {
  return true; // todos os valores da união são dias úteis
}

Isso é preferível se você não precisa de valores numéricos e quer evitar código extra.

Saída esperada

Monday é dia útil? true
Friday é dia útil? true