我(相当)是Immutable.js和Redux(和Angular2)的新手并且在标题中得到错误(我得到了setIn和getIn的错误)。错误来自我的store.ts。这是简短版本:
import { Action as reduxAction, Reducer, combineReducers } from 'redux';
import { ActionActions } from './actions/action.actions';
import { UserActions } from './actions/user.actions';
import { MetaActions } from './actions/meta.actions';
import { Action } from './app/library/action/class.action';
import * as Immutable from 'immutable';
import 'rxjs/add/operator/map';
export interface IAppState {
action: IActionState
}
export interface IActionState {
action?: Map<any, any>
}
export const INITIAL_STATE: IAppState = {
action: {
action: null
}
}
export function actionReducer(lastState: IActionState, action)
{
// Initial action state
if (undefined === lastState) {
lastState = {
action: null
}
}
// Switching
switch(action.type)
{
case ActionActions.REMOVE_EMPLOYEE:
{
return { action: lastState.action.setIn(['employees', action.value.role],
lastState.action.getIn(['employees', action.value.role])
.filter(o => o.getIn(['employee','employeeId']) !== action.value.employeeId)) };
}
}
return { action: lastState.action }
}
(请不要混淆我正在处理的对象也恰好被命名为“action”。在Redux的上下文中它有点不走运,但它在应用程序的上下文中确实有意义。 )
当编译器(transpiler?)在终端中运行时,我在标题中得到错误但是当我运行网站时脚本运行正常。没问题。只是终端中的错误。
如果我尝试在action-object上运行Immutable.map.isMap(),则返回true。方法get()和set()似乎也存在于对象上。
所以,如果它实际上是一个Map并且set()和get()有效 - 为什么不是setIn()和getIn()?要明确 - 他们确实工作 - 完美。我刚在终端收到错误。
我可以在应用程序的其他地方使用setIn()和getIn()。即使是在同一个对象上。那么为什么不在store.ts?这是我的进口问题吗?
答案 0 :(得分:0)
好的 - 在额头和墙之间的许多密集会议之后,我似乎已经自己解决了这个问题。
我导入了Immutable.js库:
::ng-deep .mat-form-field-underline .mat-form-field-ripple{
background-color:red;
}
::ng-deep .mat-form-field-underline{
background-color:red;
}
然后我像这样实例化(对象的)接口:
import * as Immutable from 'immutable';
什么时候应该
action?: Map<any, any>
显然这有效。
对于某些人来说这似乎是显而易见的,但我被抛弃了,因为Immutable.map.isMap()评估为真。