В моем случае "moduleResolution": "node"
было пропущено в tsconfig.json
.
У Вас есть два hashmaps.
Один от StringKey для оценки.
Один от EnumKey для оценки.
Вы не должны копировать все экземпляры Значения, те объекты могут быть совместно использованы двумя hashmaps.
Если это - МНОГО объектов, Вы могли бы хотеть использовать два treemaps вместо двух hashmaps. Но существенный принцип ("Совместно используют Значения") относится к обеим структурам. Одно множество значений с двумя картами.
Хорошо... "Неправильно" резкий способ поместить его. Я думаю, что, потому что наиболее распространенный словарь является "единственным ключом к значению", и большое усилие входит в обеспечение эффективных структур данных для этого (карты), часто лучше просто использовать двух из тех, совместно используя память для значений если вообще возможный.
ILookup LINQ (TKey, TElement) интерфейс может помочь. Принятие Вашего Словаря является чем-то как:
Dictionary<carKey, carValue> cars;
Вы могли использовать:
ILookUp<carValue, carKey> lookup = cars.ToLookup(x => x.Value, x => x.Key);
(... на самом деле я думаю, что, возможно, немного неправильно читал вопрос - но ILookUp мог бы все еще отвечать всем требованиям, но ключ/набор значений, возможно, должен был бы быть ключом и перечислением.)
Действительно необходимо ввести в ту же структуру с обоими типами ключа? Вы, вероятно, не должны восстанавливать сложную структуру данных сами. Вы могли сделать своего рода инкапсуляцию для справочной таблицы так, чтобы у Вас действительно было две справочных таблицы, если память не является проблемой. Вы могли использовать эту структуру инкапсуляции для моделирования способности вытащить значение из "той же" структуры с любым типом ключа.
ИЛИ
Если существует некоторый способ отобразиться между перечислением значений и строковым ключом, Вы могли бы пойти тем путем только с наличием одного типа справочной таблицы.
Если бы каждое значение, как гарантируют, будет доступно обоими типами ключей, другая идея состояла бы в том, чтобы преобразовать один тип ключа к другому. Например:
public Value getValue(String key)
{
dictionary.get(key); // normal way
}
public Value getValue(Enum enumKey)
{
String realKey = toKey(enumKey);
getValue(realKey); // use String key
}
У Вас могла быть своя реализация Перечисления toKey () метод, который возвращает их Строковый ключ, или, возможно, имейте другой словарь, который отображает Перечислимые значения на Строковые дубликаты.