Utilizando Enumerações (Enum) - TypeScript
O tipo enum
Para definir uma enumeração, utiliza-se a palavra-chave enum
enum Season { Winter, Spring, Summer, Autumn };
Agora, vamos usar a enumeração:
enum Season { Winter, Spring, Summer, Autumn };
let current: Season = Season.Summer;
console.log(current); // 2
current = Season.Autumn; // alterando o valor
Aqui, criamos a variável current
Season
Season.Summer
Enumerações numéricas
Por padrão, as constantes da enumeração representam valores numéricos. Ou seja, é uma enumeração numérica em que cada constante é associada a um valor numérico.
A enumeração criada acima:
enum Season { Winter, Spring, Summer, Autumn };
É, na verdade, equivalente a:
enum Season { Winter = 0, Spring = 1, Summer = 2, Autumn = 3 };
Podemos redefinir explicitamente esses valores. Se atribuirmos um valor a uma constante, os valores das constantes seguintes serão incrementados em um:
enum Season { Winter = 5, Spring, Summer, Autumn }; // 5, 6, 7, 8
Ou podemos atribuir um valor específico a cada constante:
enum Season { Winter = 4, Spring = 8, Summer = 16, Autumn = 32 }; // 4, 8, 16, 32
Também podemos obter diretamente o valor textual:
enum Season { Winter = 0, Spring = 1, Summer = 2, Autumn = 3 };
var current: string = Season[2]; // Summer
console.log(current); // Summer
Enumerações de strings
Além das enumerações numéricas, o TypeScript possui enumerações de strings, cujas constantes assumem valores textuais:
enum Season {
Winter = "Inverno",
Spring = "Primavera",
Summer = "Verão",
Autumn = "Outono"
};
var current: Season = Season.Summer;
console.log(current); // Verão
Enumerações heterogêneas mistas
Também é possível definir enumerações mistas, cujas constantes podem ser números e strings.
enum Season {
Winter = 1,
Spring = "Primavera",
Summer = 3,
Autumn = "Outono"
};
var current: Season = Season.Summer;
console.log(current); // 3
console.log(Season.Autumn); // Outono
Enumerações em funções
A enumeração pode ser usada como parâmetro de função.
enum DayTime {
Morning,
Evening
};
function welcome(dayTime: DayTime) {
if(dayTime === DayTime.Morning) {
console.log("Bom dia");
} else {
console.log("Boa noite");
}
}
let current: DayTime = DayTime.Morning;
welcome(current); // Bom dia
welcome(DayTime.Evening); // Boa noite
Cada constante da enumeração descreve um certo estado. A função welcome()
dayTime
No entanto, é importante notar que, como a enumeração DayTime
welcome()
welcome(1); // Boa noite
Ou até mesmo definir o parâmetro da função como numérico e passar constantes da enumeração numérica:
enum DayTime {
Morning,
Evening
};
function welcome(dayTime: number) {
if(dayTime === DayTime.Morning) {
console.log("Bom dia");
} else {
console.log("Boa noite");
}
}
let current: DayTime = DayTime.Morning;
welcome(current); // Bom dia
welcome(DayTime.Evening); // Boa noite
Exemplo com parâmetro de enumeração de strings:
enum DayTimeMessage {
Morning = "Bom dia",
Evening = "Boa noite"
};
function welcome(message: DayTimeMessage) {
console.log(message);
}
let mes: DayTimeMessage = DayTimeMessage.Morning;
welcome(mes); // Bom dia
welcome(DayTimeMessage.Evening); // Boa noite
Ao usar enumerações de strings, ao contrário das numéricas, não podemos passar uma string arbitrária ao parâmetro:
welcome("Olá, você está acordado?");
Nesse caso, o compilador nos retornará um erro durante a compilação.
Por outro lado, se o parâmetro for do tipo string
enum DayTimeMessage {
Morning = "Bom dia",
Evening = "Boa noite"
};
function welcome(message: string) {
console.log(message);
}
let mes: DayTimeMessage = DayTimeMessage.Morning;
welcome(mes); // Bom dia
welcome(DayTimeMessage.Evening); // Boa noite