Я часто нахожу себя передающим объекты, которые имеют идентификаторы или имена, которые их идентифицируют, но также являются свойством объекта. Например:
type ExampleItemName = string;
interface ExampleItem {
name: ExampleItemName ;
value: number;
}
Мне также часто нужно создавать списки этих предметов, и я считаю, что удобно иметь доступ к предметам по их name
s. Наиболее логичной структурой данных, которую я вижу для этого, является Map
, то есть:
type ExampleItemList = Map<ExampleItemName, ExampleItem>;
Это удобно и удобно, так как я могу получить доступ к любому элементу по name
с помощью Map.get
, но я также могу легко перебирать весь список, используя for...of
.
Однако мне кажется, что это неправильно, потому что информация name
дублируется - она присутствует как в ключе, так и в значении карты. Если name
из ExampleItem
изменяется, соответствующий ключ на карте не меняется, поэтому он чувствует себя хрупким.
Это плохая практика? Если да, то какой лучший способ добиться нужной мне функциональности?