2017-06-22 5 views
2

フローで関数の戻り値の型を取得する方法は?この例では

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, 
}; 

私は、関数が返されますtypeを抽出したいと思いますので、私はその型を再利用することができます。私はそれを得る方法がないと思うことができます。上記は機能しません。 typeof getValueが関数を返します。さんはこれを使ってみましょう

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

type TheReturnType = ExtractReturn<typeof getValue> 

TheReturnTypegetValue機能の戻り値の型を持っています。ここ

+0

'getValue'は' MyType'の型を返しますので、 'nextObj'の型を' MyType'に設定することはできませんか?あるいは私は誤解していますか? – saadq

+0

私はこれを行う方法はないと思います。また、与えられた関数が単一の型しか持たないという保証もありません。多くの関数は、入力引数に応じて異なる型を持ちます。 – loganfsmyth

+0

@loganfsmyth多くの可能な型は、単一の型であるそれらの型の和集合として表現できます! –

答えて

0

は、関数の戻り値の型をつかむことができExtractReturnヘルパーです。また、ExtractReturnヘルパーを呼び出すには、関数名の前にtypeofという演算子が必要です。ここで


ExtractReturnヘルパーを実装するための全く異なる方法である:

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

このヘルパーは、上記1とまったく同じように動作します。ポイントはこれを達成するための方法が複数あるということです。

関連する問題