Объектам целочисленных перечислений TypeScript можно присвоить любое значение - PullRequest
0 голосов
/ 01 мая 2020

У меня есть enum следующим образом.

const enum Mode{
    Add=1,
    Edit=22
}
let currentMode:Mode=222222;

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

Когда мы используем перечисление с Java или C#, это заставляет нас указывать правильное значение.

Пожалуйста, поделитесь мыслями.

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

вместо этого используйте строковые перечисления или типы объединения

Поведение перечисляемых вами числительных c перечислений соответствует , как сам начальник Typescript заявляет . Подробнее см. Выпуск 26362 .

Если вы хотите безопасность значений (допускаются только допустимые базовые значения) или истинную безопасность типов, вам придется использовать другие опции, такие как:

  • Типы объединений (безопасные значения)

    type Mode = 'Add' | 'Edit'
    
  • Перечисления строк (безопасные типы)

    enum Mode {Add = 'add', Edit = 'edit'}
    

Для объяснения двух вышеупомянутых опций и для дополнительных опций см. Этот ответ .

0 голосов
/ 02 мая 2020

Согласно документации TypeScript :

Перечисления позволяют нам определять набор именованных констант

, т. Е. Enum не является ограниченным набором options, это просто список констант.

Код из вашего вопроса:

const enum Mode{
    Add=1,
    Edit=22
}
let currentMode:Mode=222222;

let add: Mode = Mode.Add

будет скомпилирован в следующие JavaScript:

"use strict";
let currentMode = 222222;
let add = 1 /* Add */;

As Вы можете видеть, что не будет никакого объекта, созданного для вашего const enum в JS. Вместо этого компилятор TypeScript поместит используемые значения enum в места использования.

Что касается типа enum в C#. Вы можете сделать то же самое. Код, указанный ниже, действителен C# код:

public enum Mode
{
    Add = 1,
    Edit = 2
}
...
Mode mode = (Mode)123;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...