Enums

syntax

enum varname["<" type ">"] {
varname1 [= value]
varname2 [= value]
...
varnameN [= value]
}

number

enum Color {
Red
Green
Blue
}
let color = Color::Red
console.log(color)
// 0

custom start

enum Color {
Red = 100
Green // 101
Blue // 102
}

custom number

enum Color {
Red = 100
Green = 200
Blue = 300
}

string

enum CardSuit<String> {
Clubs
Diamonds
Hearts
Spades
}
let card = CardSuit::Clubs
console.log(card)
// clubs

custom string

enum CardSuit<String> {
Clubs = 'clb'
Diamonds = 'dmd'
Hearts = 'hrt'
Spades = 'spd'
}

flags

#[flags]
enum AnimalFlags {
None
HasClaws
CanFly
EatsFish
Endangered
EndangeredFlyingClawedFishEating = HasClaws | CanFly | EatsFish | Endangered
Predator = CanFly | HasClaws
}
func printAnimalAbilities(animal) {
let animalFlags = animal.flags
if animalFlags & AnimalFlags::HasClaws {
console.log('animal has claws')
}
if animalFlags & AnimalFlags::CanFly {
console.log('animal can fly')
}
if animalFlags == AnimalFlags::None {
console.log('nothing')
}
}
let animal = {
flags: AnimalFlags::None
}
printAnimalAbilities(animal)
// nothing
animal.flags |= AnimalFlags::HasClaws
printAnimalAbilities(animal)
// animal has claws
animal.flags &= ~AnimalFlags::HasClaws
printAnimalAbilities(animal)
// nothing
animal.flags |= AnimalFlags::HasClaws | AnimalFlags::CanFly
printAnimalAbilities(animal)
// animal has claws, animal can fly