В TypeScript перечисление — это тип данных, который позволяет вам определять набор именованных констант. При сериализации и десериализации значений перечислений в JSON и обратно существует несколько методов, которые можно использовать для достижения желаемого поведения. Вот несколько методов, которые вы можете рассмотреть:
- Строковое преобразование значений перечисления. Вы можете преобразовать значения перечисления в соответствующее строковое представление с помощью метода
.toString()
. Например:
enum Color {
Red,
Green,
Blue
}
const color = Color.Red;
const colorString = color.toString(); // "Red"
- Разбор значений перечисления. Чтобы преобразовать строковое представление обратно в соответствующее значение перечисления, вы можете использовать синтаксис доступа к свойствам перечисления. Например:
const colorString = "Green";
const color = Color[colorString]; // Color.Green
- Пользовательское сопоставление. Вы можете создать собственное сопоставление между значениями перечисления и их представлениями JSON, используя отдельный объект. Например:
enum Color {
Red = "R",
Green = "G",
Blue = "B"
}
const color = Color.Red;
const colorJson = {
"R": color
};
const jsonString = JSON.stringify(colorJson); // '{"R":"Red"}'
- Использование функции сопоставления. Вы можете определить функцию сопоставления, чтобы настроить сериализацию и десериализацию значений перечисления. Например:
enum Color {
Red,
Green,
Blue
}
function colorToJson(color: Color): string {
switch (color) {
case Color.Red:
return "R";
case Color.Green:
return "G";
case Color.Blue:
return "B";
default:
throw new Error("Unknown color");
}
}
function jsonToColor(json: string): Color {
switch (json) {
case "R":
return Color.Red;
case "G":
return Color.Green;
case "B":
return Color.Blue;
default:
throw new Error("Unknown JSON color representation");
}
}
const color = Color.Red;
const colorJson = colorToJson(color);
const colorDeserialized = jsonToColor(colorJson);