Сериализация и десериализация значений Enum Typescript в JSON

В TypeScript перечисление — это тип данных, который позволяет вам определять набор именованных констант. При сериализации и десериализации значений перечислений в JSON и обратно существует несколько методов, которые можно использовать для достижения желаемого поведения. Вот несколько методов, которые вы можете рассмотреть:

  1. Строковое преобразование значений перечисления. Вы можете преобразовать значения перечисления в соответствующее строковое представление с помощью метода .toString(). Например:
enum Color {
  Red,
  Green,
  Blue
}
const color = Color.Red;
const colorString = color.toString(); // "Red"
  1. Разбор значений перечисления. Чтобы преобразовать строковое представление обратно в соответствующее значение перечисления, вы можете использовать синтаксис доступа к свойствам перечисления. Например:
const colorString = "Green";
const color = Color[colorString]; // Color.Green
  1. Пользовательское сопоставление. Вы можете создать собственное сопоставление между значениями перечисления и их представлениями JSON, используя отдельный объект. Например:
enum Color {
  Red = "R",
  Green = "G",
  Blue = "B"
}
const color = Color.Red;
const colorJson = {
  "R": color
};
const jsonString = JSON.stringify(colorJson); // '{"R":"Red"}'
  1. Использование функции сопоставления. Вы можете определить функцию сопоставления, чтобы настроить сериализацию и десериализацию значений перечисления. Например:
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);