Да, мы недавно удалили тип enum из языка. Теперь вы можете в общем случае определять перечисляемые значения, используя константы и тип объединения.
// Following declarations declare a set of compile-time constants.
// I used the int value for this example. You could even do const SUN = "sun".
const SUN = 0;
const MON = 1;
const TUE = 2;
const WED = 3;
const THU = 4;
const FRI = 5;
const SAT = 6;
// This defines a new type called "Weekday"
type Weekday SUN | MON | TUE | WED | THU | FRI | SAT;
function play() {
Weekday wd1 = WED;
Weekday wd2 = 6;
// This is a compile-time error, since the possible values
// which are compatible with the type "Weekday" type are 0, 1, 2, 3, 4, 5, and 6
Weekday wd3 = 8;
}
Позвольте мне объяснить, как это работает в соответствии со спецификацией языка. Рассмотрим следующее определение типа. Вы можете назначить возможные целочисленные значения, а также логические значения (true
или false
) переменной типа IntOrBoolean
.
type IntOrBoolean int | boolean;
IntOrBoolean v1 = 1;
IntOrBoolean v2 = false;
Аналогично, вы можете определить новое определение типа, которое содержит только несколько значений, таких как это. Здесь 0
обозначает одноэлементный тип со значением 0
, а 1
обозначает другой одноэлементный тип со значением 1
. Тип Singleton - это тип, который имеет только одно значение в своем наборе значений.
type ZeroOrOne 0 | 1;
При таком понимании мы можем переписать наш тип Weekday
следующим образом.
type Weekday 0 | 1 | 2 | 3 | 4 | 5| 6;
Когда вы определяете постоянную времени компиляции, такую как const SUN = 0
, тип переменной SUN
- это не int
, а тип синглтона со значением 0
.