Повторяющиеся строковые значения в перечислении TS не вызывают ошибку компиляции? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть это в перечислении TypeScript:

export enum LMXLockRequestError {
  MaxRetries = 'bad_args',
  BadArgumentsError = 'bad_args',
}

похоже, это не вызывает ошибку компиляции. Это переносится на это:

var LMXLockRequestError;
(function (LMXLockRequestError) {
    LMXLockRequestError["MaxRetries"] = "bad_args";
    LMXLockRequestError["BadArgumentsError"] = "bad_args";
})(LMXLockRequestError = exports.LMXLockRequestError || (exports.LMXLockRequestError = {}));

если бы я тогда использовал это, чтобы сделать:

if(v === LMXLockRequestError.MaxRetries){

}

если бы v было 'bad_args', оно совпадало бы с MaxRetries и BadArgumentsError.

Это должно произойти? Или я должен сообщить о проблеме с TypeScript на Github?

Для меня перечисление должно иметь разные ключи, но, возможно, не обязательно разные значения? Было бы хорошо, если бы был способ указать перечислению, что оно должно иметь разные значения.

1 Ответ

0 голосов
/ 04 июля 2018

относительно спецификации TS ENUM:

Перечисления позволяют нам определять набор именованных констант. Использование перечислений может облегчить документирование намерений или создать набор отдельных случаев. TypeScript предоставляет как числовые, так и строковые перечисления.

Ничего особенного в том, что он должен быть уникальным, так что, вероятно, поведение в порядке.

перечисление / машинопись

UPDATE: В ENUM и «багах» есть еще одна интересная вещь:

Приращение значения перечисления не учитывает ранее определенные значения, а также компилятор не выдает ошибку при дублировании значений.

Это означает, что вы можете получить потенциальные ошибки:

enum Color {Red = 3, Green = 2, Blue};

Color.Red == Color.Blue; //true
...