2017-06-22 5 views
2

Mit diesem Beispiel:Wie erhält man den Rückgabetyp einer Funktion im Flow?

const myObj = { 
    test: true, 
}; 

type MyType = typeof myObj; 

const getValue =(): MyType => { 
    return myObj; 
}; 

// how to do this?? 
type TheReturnType = getValue; 

const nextObj: TheReturnType = { 
    test: false, 
}; 

Ich möchte die type extrahieren, dass die Funktion zurück, so kann ich diese Art wiederverwenden. Ich kann mir keinen Weg vorstellen, es zu bekommen. Das obige funktioniert nicht. typeof getValue wird die Funktion zurückgeben.

+0

'getValue' gibt einen Typ von' MyType' zurück, also können Sie nicht einfach den Typ von 'nextObj' auf' MyType' setzen? Oder bin ich falsch verstanden? – saadq

+0

Ich glaube nicht, dass es einen Weg gibt, dies zu tun. Es gibt auch keine Garantie, dass eine bestimmte Funktion nur einen einzigen Typ hat. Viele Funktionen haben abhängig von ihren Eingabeargumenten unterschiedliche Typen. – loganfsmyth

+0

@loganfsmyth Viele mögliche Typen können als die Vereinigung dieser Typen ausgedrückt werden, die ein einzelner Typ ist! –

Antwort

0

Hier ist ein ExtractReturn Helfer, die den Rückgabetyp einer Funktion greifen kann:

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

ist dies Lassen Sie verwenden:

type TheReturnType = ExtractReturn<typeof getValue> 

Jetzt TheReturnType den Rückgabetyp der getValue Funktion haben. Beachten Sie außerdem, dass das Aufrufen des ExtractReturn-Helfers einen typeof-Operator vor dem Funktionsnamen erfordert.


Hier ist eine ganz andere Art und Weise die ExtractReturn Helfer zu implementieren:

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

Dieser Helfer funktioniert genauso wie die oben; Der Punkt ist, dass es mehr als einen Weg gibt, dies zu erreichen.

Verwandte Themen