7

Как конвертировать строку в enum в TypeScript?

1

У меня есть определенный следующий enum в TypeScript:

enum Color {
    Red, Green
}

Теперь в моей функции я получаю цвет в виде строки. Я попробовал следующий код:

var green = "Green";
var color: Color = <Color>green; // Ошибка: нельзя преобразовать строку в enum

Как я могу преобразовать это значение в enum?

5 ответ(ов)

2

Если вы используете строковые значения в вашем перечислении (enum), то прямое приведение (cast) будет работать отлично.

enum Color {
  Green = "Green",
  Red = "Red"
}

const color = "Green";
const colorEnum = color as Color;

В этом примере переменная color имеет строковое значение "Green", и вы можете без проблем привести ее к типу Color. Это работает, потому что строковые значения в перечислении точно соответствуют строкам, которые вы используете. Таким образом, colorEnum будет иметь тип Color и значение Color.Green.

1

В этом примере показано, как использовать перечисления (enum) в TypeScript с включенным --noImplicitAny.

Сначала создается перечисление Color с двумя значениями: Red и Green.

enum Color {
    Red, 
    Green
}

Для преобразования значения перечисления в строку, вы можете сделать следующее:

// Преобразование в строку
var green: string = Color[Color.Green];

Здесь мы получаем строковое представление Color.Green, которое будет равно "Green".

Чтобы выполнить обратное преобразование (из строки в перечисление), вы можете использовать следующую конструкцию:

// Преобразование обратно в Enum / число
var color: Color = Color[green as keyof typeof Color];

В этом случае мы используем тип keyof typeof Color, чтобы явно указать, что green является ключом типа Color. Это позволяет избежать ошибки, связанной с неявным любым типом (any), требуя строгой типизации при компиляции.

Эти преобразования работают корректно в TypeScript с включенным --noImplicitAny, благодаря чему ваш код будет более безопасным и предсказуемым.

Источники:

1

Если вы используете TypeScript, согласен с тем, что многие из приведённых выше решений могут не сработать или быть слишком сложными.

Ситуация: Строки не совпадают с перечисляемыми значениями (разный регистр).

enum Color {
  Green = "green",
  Red = "red"
}

Просто используйте:

const color = "green" as Color;

Обратите внимание, что это не гарантирует, что значение является допустимым значением перечисления.

0

Я завел это в рабочее состояние, используя следующий код:

var green = "Green";
var color : Color = <Color>Color[green];

Таким образом, я смог успешно преобразовать строку "Green" в значение перечисления Color. Убедитесь, что строка соответствует одному из значений перечисления, иначе произойдет ошибка выполнения.

0

Если компилятор TypeScript знает, что тип переменной — это строка, то данный код будет работать:

let colorName: string = "Green";
let color: Color = Color[colorName];

В противном случае вам следует явно преобразовать переменную в строку (чтобы избежать предупреждений компилятора):

let colorName: any = "Green";
let color: Color = Color["" + colorName];

Выполнение обоих решений во время выполнения будет работать без проблем.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь