2017-06-16 1 views
0

Ich möchte die Requisiten zu extrahieren mapStateToProps gibt mir, um meine eigenenProps als die Liste der Requisiten die Komponente erhält. Das scheint mir ziemlich üblich zu sein, indem ich react/redux mit flow verwende.flowtype wie bekomme ich eine Liste von Funktion Rückgabewerte

Ich kann meine Art manuell definieren:

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

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

Aber all diese getX Funktionen kennen bereits ihren Rückgabetyp. Also eigentlich mapStateToProps bereits kennt seinen Rückgabetyp ... Aber ich kann nicht verwenden:

type Props = { defaultProp: boolean } & mapStateToProps; 

weil mapStateToProps ist die Funktion selbst, nicht der Rückgabewert.

Die Frage ist: Wie bekomme ich (nicht eingestellt) eine Art von was eine Funktion zurückgibt.

+0

Diese Frage ist nicht klar. Erhalten Sie einen Fehler, den Sie nicht erwarten? Wenn dies der Fall ist, geben Sie bitte den Fehlertext und ein Code-Snippet an, mit dem ein Leser den Fehler reproduzieren kann. –

+0

nein ich bekomme keinen Fehler. Ich kann nicht herausfinden, wie ich den Typ bekomme, den ich bekommen möchte. –

+0

Mögliches Duplikat von [Wie bekomme ich den Rückgabetyp einer Funktion in den Fluss?] (Https://stackoverflow.com/questions/44700904/how-to-get-a-functions-return-type-in-flow) –

Antwort

0

Der folgende Code kann einen Rückgabetyp aus einem Funktionstyp extrahieren:

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

ist dies Lassen Sie verwenden:

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

type StateProps = ExtractReturn<typeof mapStateToProps> 

Hier alternative Lösung basiert auf $ObjMap statt:

type ExtractReturn<F> = 
    $PropertyType<$ObjMap<{ x: F }, <R>(f:() => R) => R>, 'x'> 
Verwandte Themen