错误:“属性'setIn'在类型'Map <any,any =”“>'”

时间:2017-10-28 07:36:06

标签: angular redux immutable.js

我(相当)是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?这是我的进口问题吗?

1 个答案:

答案 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()评估为真。