Получить значение перечисления по ключу, не зная конкретного типа перечисления - PullRequest
2 голосов
/ 30 октября 2019

У меня есть тип, который состоит из 3 перечислений.

enum TextItem {
  BOOK = "inventory.book",
  PAGE = "inventory.page"
}

enum FoodItem {
  BURGER = "food.burger",
  LETTUCE = "food.lettuce",
}

enum DrinkItem {
  WATER = "drinks.water",
  COLA = "drinks.cola",
}

type Item = TextItem | FoodItem | DrinkItem;

const getEnumValue(item: Item) {
  // What to do here?
}

Перечисление типа Item передается в функции getEnumValue. Что это за вещь, я не буду знать. Но он наверняка имеет тип Item (например, DrinkItem.WATER).

При передаче элемента в функцию getEnumValue, как определить соответствующее строковое значение?

Я былдумая вместо предметов я бы сказал keyof Item. Но затем Typescript начинает жаловаться на то, что элемент не имеет типа.

1 Ответ

0 голосов
/ 30 октября 2019

Вы должны объединить все перечисления в один объект:

const MENU: IMenu = {
  ... FoodItem,
  ... DrinkItem
};

И набрать для этого объекта будет следующий

interface IMenu {
  [key: string]: Item;
}

И в функции вы легко вызоветезначение, которое вам нужно:

Menu[item]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...