2017-08-28 59 views
0

在打字稿中,反應&redx,state參數的mapStateToProps函數連接方法聲明爲any如何使用接口代替函數中的任何類型參數

interface MapStateToProps<TStateProps, TOwnProps> { 
    (state: any, ownProps: TOwnProps): TStateProps; 
} 

我想用我的代碼中定義的類型來代替狀態參數的任何類型。我怎樣才能做到這一點?

const mapStateToProps = (state: MyStateInterface) => {}; 

但是這不起作用,因爲它不符合簽名。

什麼工作只有當我把它像這樣:

const mapStateToProps = (state: any) => {}; 

但後來我失去我的IDE自動完成,並鍵入我的函數內部檢查。

事實上,它是一個更多的打字稿問題,而不是一個打字問題。

當函數類型的參數爲any參數時,如何在使用時指定參數的實際類型?

+0

不應它是'常量mapStateToProps:MyStateInterface =(狀態)=>'?你正試圖將函數值分配給不正確的狀態參數。你可以定義一個狀態接口,它包含你的reducer的返回值,如果你想把這個類型賦值給狀態參數 –

+0

,實際上我需要輸入函數的''''參數。 'MyStateInterface'是一個接口,描述了我在應用程序中的存儲(它可以名稱爲'StoreInterface',我在這裏將它命名爲與redux接口聲明相匹配) – Bouni

+0

不確定是什麼意思?如果您有'combineReducers'的索引,則可以爲該組合縮減器定義一個類型/接口,這就是狀態值。讓我寫一個答案來幫助解釋 –

回答

0

如果你有幾個減速是做一些東西,然後你正在結合他們有像這樣

export default combineReducers({ 
    user: userReducer, 
    something: someReducer 
}); 

一些特定的輸出,其中userReducer這是

interface UserReducerState { 
    authenticated: boolean; 
    loading: boolean; 
    username: string; 
    email: string; 
} 
const defaultState = { 
    authenticated: false, 
    loading: false, 
    username: '', 
    email: '' 
}; 

export default (state: UserReducerState = defaultState, action: MyActionTypeInterface) => { 
    switch (action.type) { 
     case USER_LOADED: 
      return {...state, ...action.payload, ...{authenticated: true, loading: false}; 
     default: 
      return state; 
    } 
}; 

當你connect組件mapStateToProps函數將收到一個狀態參數,其中有減速器值

interface ConnectStateProps { 
    user: UserReducerState; 
    something: SomethingReducerState 
} 
const mapStateToProps = (state: ConnectStateProps) => { 
    console.log(state); 
    ...etc 

此的console.log的輸出是這樣的

{ 
    user: { 
     authenticated: false, 
     loading: false, 
     username: '', 
     email: '' 
    }, 
    something: ...etc 
} 
+0

是的;我的問題是當我編寫'ConnectStateProps'作爲'mapStateToProps'函數的''''''參數的類型時(類似於你的例子),typescript告訴我它不匹配函數簽名,並且期望param類型是'any ';像這樣你的例子'const mapStateToProps =(state:any)' – Bouni

+0

@Bouni你可以爲此創建一個jsfiddle嗎?我現在使用這個確切的東西。沒有多少我可以做的,以幫助當前的信息 –

+0

我發現我的錯誤,正如你所說earlues它是在返回類型不匹配不參數的類型。我誤解了打字稿編譯器的錯誤信息 – Bouni

相關問題