Я работаю над селектором ngrx, который преобразует раздел дерева состояний в модель представления. В качестве простого примера, в моем дереве состояний у меня есть массив manager
. Таким образом, у меня есть следующая настройка для моего дерева состояний и просмотр модели-
export interface Manager {
id: string,
name: string
}
export interface AppState {
managers: Manager[]
}
export interface ManagersVM {
byId: {[key: string]: Manager},
allIds: string[]
}
export const defaultManagersVM: ManagersVM {
byId: {},
allIds: []
};
Тогда в моем селекторе у меня есть:
export const selectManagersVM = createSelector(selectManagers, (data) => {
let mgrsVM: ManagersVM = { ...defaultManagersVM };
for(let mgr of data.managers) {
mgrsVM.byId[mgr.id] = mgr;
mgrsVM.allIds.push(mgr.id);
}
})
Проблема, с которой я сталкиваюсь, заключается в том, что строка:
let mgrsVM: ManagersVM = { ...defaultManagersVM };
, похоже, не делает копию свойств defaultManagersVMs. (console.log из defaultManagersVM после запуска селектора показывает, что теперь у него есть непустые byId и allIds). У меня сложилось впечатление, что оператор распространения внутри вновь определенного объекта создаст копию, но это неправильно. Как я могу гарантировать, что defaultManagersVM не будет видоизменяться в моем селекторе.