Числовое перечисление в TypeScript допускает любое число, тогда как строковое перечисление не - PullRequest
0 голосов
/ 27 ноября 2018

Скажем, у меня есть числовое перечисление:

const enum EStatus {
   Busy = 0,
   Available = 1,
   Away = 2  
}

TypeScript не будет жаловаться, когда я делаю следующее:

const status: EStatus = 4

Однако, если у меня есть строкаenum:

const enum EDayOfWeekend {
   Saturday = "Saturday",
   Sunday = "Sunday"
}

Тогда TypeScript будет жаловаться, когда я попытаюсь сделать следующее:

const dayOfWeekend: EDayOfWeekend = "Tuesday"

Я бы ожидал, что TypeScript будет совместим с разрешением обоихили не позволяя либо.ИМО должен не разрешать использование чего-либо, кроме определенных значений, или даже лучше обеспечивать, чтобы вы могли использовать только перечисление для инициализации переменных, например

const dayOfWeekend = EDayOfWeekend.Saturday

I 'Мне было бы интересно узнать, почему это несоответствие существует в TypeScript и есть ли оно в дизайне.

1 Ответ

0 голосов
/ 27 ноября 2018

Основной причиной различий в поведении является возможность иметь нумерацию флагов и использовать на них побитовые операторы.Для строковых перечислений нет эквивалентной функции.В этом выпуске GhitHub Даниэль Розенвассер разъясняет команду разработчиков:

Поведение мотивируется побитовыми операциями .Есть моменты, когда SomeFlag.Foo |SomeFlag.Bar предназначен для создания другого SomeFlag.Вместо этого вы получите число, и вам не нужно возвращаться к SomeFlag`.Я думаю, что если бы мы сделали TypeScript снова и все еще имели перечисления, мы бы создали отдельную конструкцию для битовых флагов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...