2017-10-28 120 views
1

我是(相當)新Immutable.js和Redux(和Angular2)並獲得標題中的錯誤(我得到一個錯誤爲setIn和getIn)。錯誤來自我的store.ts。這裏的短版本:錯誤:「屬性'setIn'不存在類型'地圖<any, any>''

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 } 
 
}

(請不要混淆起來,我的工作也物體恰巧被命名爲「行動」這是在上下文有點不走運。 Redux,但它在應用程序的上下文中是有意義的。)

當編譯器(transpiler?)在終端中運行時,在標題中出現錯誤,但運行網站時腳本運行得很好。沒有問題。只是在終端的錯誤。

如果我嘗試在action-object上運行Immutable.map.isMap(),它將返回true。 get()和set()方法似乎也存在於對象上。所以如果它實際上是一個Map和set()和get()的作品 - 爲什麼不setIn()和getIn()?要清楚 - 他們確實工作 - 完美。我只是在終端出現錯誤。

我可以在應用程序的其他地方使用setIn()和getIn()。即使在同一個對象上。那麼爲什麼不在store.ts?我的進口產品有問題嗎?

回答

0

好的 - 經過前額和牆壁之間的許多密集會議後,我似乎自己解決了這個問題。

我進口Immutable.js庫這樣:

import * as Immutable from 'immutable'; 

然後,我實例化(接口的),像這樣的對象:

action?: Map<any, any> 

當它應該是

action?: Immutable.Map<any, any> 

顯然這個工程。

對於某些人來說,這可能看起來很明顯,但因爲Immutable.map.isMap()評估爲true,所以我被拋棄了。

相關問題