Как конвертировать строку в enum в TypeScript?
У меня есть определенный следующий enum в TypeScript:
enum Color {
Red, Green
}
Теперь в моей функции я получаю цвет в виде строки. Я попробовал следующий код:
var green = "Green";
var color: Color = <Color>green; // Ошибка: нельзя преобразовать строку в enum
Как я могу преобразовать это значение в enum?
5 ответ(ов)
Если вы используете строковые значения в вашем перечислении (enum), то прямое приведение (cast) будет работать отлично.
enum Color {
Green = "Green",
Red = "Red"
}
const color = "Green";
const colorEnum = color as Color;
В этом примере переменная color
имеет строковое значение "Green"
, и вы можете без проблем привести ее к типу Color
. Это работает, потому что строковые значения в перечислении точно соответствуют строкам, которые вы используете. Таким образом, colorEnum
будет иметь тип Color
и значение Color.Green
.
В этом примере показано, как использовать перечисления (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
, благодаря чему ваш код будет более безопасным и предсказуемым.
Источники:
Если вы используете TypeScript, согласен с тем, что многие из приведённых выше решений могут не сработать или быть слишком сложными.
Ситуация: Строки не совпадают с перечисляемыми значениями (разный регистр).
enum Color {
Green = "green",
Red = "red"
}
Просто используйте:
const color = "green" as Color;
Обратите внимание, что это не гарантирует, что значение является допустимым значением перечисления.
Я завел это в рабочее состояние, используя следующий код:
var green = "Green";
var color : Color = <Color>Color[green];
Таким образом, я смог успешно преобразовать строку "Green" в значение перечисления Color. Убедитесь, что строка соответствует одному из значений перечисления, иначе произойдет ошибка выполнения.
Если компилятор TypeScript знает, что тип переменной — это строка, то данный код будет работать:
let colorName: string = "Green";
let color: Color = Color[colorName];
В противном случае вам следует явно преобразовать переменную в строку (чтобы избежать предупреждений компилятора):
let colorName: any = "Green";
let color: Color = Color["" + colorName];
Выполнение обоих решений во время выполнения будет работать без проблем.
Как явно задать новое свойство у `window` в TypeScript?
Как преобразовать строку в число в TypeScript?
"Получение и установка значений в TypeScript: методы get и set"
Как удалить элемент массива в TypeScript?
'unknown' против 'any': в чем разница?