Да, это должно быть возможно с одним оператором, например
const createModifiedCopyIfWished = (
interfaceName: InterfaceName,
wished: boolean
) => wished ? {
...interfaceName,
attribute3: new Map(
[...Array.from(interfaceName.attribute3), [{ a1: 1, a2: 2 }, 123]]
)
} : interfaceName
Это предполагает, что вы пытаетесь клонировать карту, а не просто изменить существующую.
Имейте в виду , однако, IKey
, вероятно, не подходит тип ключа для Map
.Map
использует равенство объектов на основе идентичности (тот же самый точный объект в памяти), а не какого-либо равенства "одинаковых свойств".Таким образом, следующее не будет вести себя так, как можно было бы ожидать:
const map: Map<IKey, number> = new Map();
map.set({ a1: 1, a2: 2 }, 123);
const val = map.get({ a1: 1, a2: 2});
console.log(val); // undefined !
Это потому, что ({a1: 1, a2: 2} === {a1: 1, a2: 2})
- это false
.Если вы не очень осторожны, использование объектов в качестве ключей карты - хороший способ их потерять.Единственный способ, которым объекты в качестве ключей карты работают, - это хранить где-то реальные ключи объектов и использовать их позже для поиска записей на карте.И это обычно не то, что хотят люди.
Более разумное поведение, вероятно, состоит в том, чтобы просто использовать string
в качестве ключа и преобразовать предполагаемый ключ в что-то вроде JSON.stringify(objectKey)
перед тем, как положить его на карту или посмотреть на него.,
В любом случае, надеюсь, это поможет.Удачи.