2017-06-16 14 views
0

私は小道具を抽出したいmapStateToPropsは、コンポーネントを取得している小道具のリストとして私のownPropsに追加することを与えています。これは、私のかなり普通のようです。flowtype関数の戻り値のリストを取得する方法

私は手動で私のタイプを定義することができます。

type StateProps = { 
    activeDuration: ?number, 
    activeColor: ?number, 
    activeAccessories: ?number[], 
} 

const mapStateToProps = (state): StateProps => ({ 
    activeDuration: getActiveDuration(state), 
    activeColor: getActiveColor(state), 
    activeAccessories: getActiveAccessories(state), 
}); 

しかし、これらすべてのgetXの機能は、すでに彼らの戻り値の型を知っています。だから、実際にmapStateToPropsはすでにその戻り値の型... を知っているしかし、私は使用することはできません:関数自体ではなく、戻り値である

type Props = { defaultProp: boolean } & mapStateToProps; 

mapStateToPropsので。

質問は次のとおりです。関数が返す型を取得する(設定しない)にはどうすればよいですか。

+0

この質問は明確ではありません。期待していないエラーが出ていますか?その場合は、エラーテキストと、エラーを再現するためのコードスニペットを入力してください。 –

+0

エラーは発生していません。私は取得したいタイプを取得する方法を理解することはできません。 –

+0

[フロー内で関数の戻り値を取得する方法は?](https://stackoverflow.com/questions/44700904/how-to-get-a-function-return-type-in​​-flow) –

答えて

0

次のコードは、関数の型から戻り値の型を抽出することができます。

type _ExtractReturn<B, F: (...args: any[]) => B> = B; 
type ExtractReturn<F> = _ExtractReturn<*, F>; 

だが、これを使ってみましょう:ここ

const mapStateToProps = (state) => ({ 
    activeDuration: getActiveDuration(state), 
    activeColor: getActiveColor(state), 
    activeAccessories: getActiveAccessories(state), 
}); 

type StateProps = ExtractReturn<typeof mapStateToProps> 

ではなく$ObjMapに基づく代替ソリューションです:

type ExtractReturn<F> = 
    $PropertyType<$ObjMap<{ x: F }, <R>(f:() => R) => R>, 'x'> 
関連する問題