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 Weekdaycom os cinco dias úteis. - Implementar
isWeekdayque retornatruepara os dias presentes efalsepara outros valores (mesmo que não existam no enum). - Chamar
isWeekday(Weekday.Monday)eisWeekday(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
- Declaramos
enum Weekdaysem valores explícitos; o TypeScript atribui automaticamente 0, 1, 2, 3, 4. - A função
isWeekdayrecebe um parâmetro do tipoWeekday. - Dentro da função, comparamos o valor numérico do enum:
day >= Weekday.Monday(0) eday <= Weekday.Friday(4). - Retornamos
truese estiver nesse intervalo,falsecaso contrário. - Chamamos
isWeekdaycomWeekday.MondayeWeekday.Fridaye 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.Mondaycomo string:console.log(Weekday.Monday)imprime0, não'Monday'. Para obter o nome, useWeekday[Weekday.Monday]. - Comparar com valores fora do intervalo:
isWeekday(10)compila, mas retornafalse; 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