2017-08-28 11 views
0

typescriptで reduxと入力し、関数connectメソッドのstateパラメータをanyと宣言します。関数内の任意の型パラメータの代わりにインタフェースを使用するには

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

私は、状態変数の任意の型の代わりに自分のコードで定義した型を使用したいと思います。それをどうすれば実現できますか?

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

しかし、署名と一致しないため、これは機能しません。

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

をしかし、私は私のIDEの自動補完を失うと私の関数の内部チェックを入力します。どのような作品

は、私はこのようにそれを置く場合にのみです。

実際、それはreduxものよりもタイスクリプトの質問です。

ファンクションタイプにパラメータがanyのパラメータがある場合、パラメータの実際のタイプはどのように指定するのですか?

+0

のように見えるのでしょうか?関数の値を正しくない状態変数に代入しようとしています。その型を状態パラメータ –

+0

に代入したい場合は、減算器の戻り値を持つ状態インターフェイスを定義することができます。実際には、関数の 'state'パラメータを入力する必要があります。 'MyStateInterface'は、アプリケーション内の私のストアを記述するインターフェースです(名前は' StoreInterface'で可能ですが、ここではreduxインターフェースの宣言と一致するように名前を付けました) – Bouni

+0

どういう意味ですか?あなたが 'combinedReducers'のインデックスを持っていれば、あなたは、その結合されたレデューサーのためのタイプ/インターフェースを定義することができます。これは状態値となります。説明を助けるために答えを書こうとする –

答えて

0

あなたは、いくつかのものを行う少数の減速を持って、その後、あなたはとても

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コンポーネントです

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

のようないくつかの特定の出力を持つためにそれらを結合している場合mapStateToProps関数は、減算値を内部に持つ状態引数を受け取ります。

interface ConnectStateProps { 
    user: UserReducerState; 
    something: SomethingReducerState 
} 
const mapStateToProps = (state: ConnectStateProps) => { 
    console.log(state); 
    ...etc 
MyStateInterface =(状態)=> `:このはconsole.logの

出力は、それが` constのmapStateToPropsすべきではない。この

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

はい、私の問題は 'mapStateToProps'関数の' state'パラメタの型として 'ConnectStateProps'を書くときです(あなたの例のように)、typescriptは関数シグネチャと一致しておらず、param型が' any '; 'const mapStateToProps =(state:any)' – Bouni

+0

@Bouniこれに対してjsfiddleを作成できますか?私はこの正確なことを今使っています。現在の情報を手助けすることはあまりありません –

+0

私は間違いを発見しました。あなたはそれが戻り値の型であって、paramの型と一致しなかったということを言っていました。私はtypescriptコンパイラのエラーメッセージを誤解しています – Bouni

関連する問題