如何在流中获取函数的返回类型?

时间:2017-06-22 13:32:25

标签: flowtype

通过这个例子:

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将返回该函数。

1 个答案:

答案 0 :(得分:3)

这是一个ExtractReturn助手,它可以获取函数的返回类型:

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

让我们用这个:

type TheReturnType = ExtractReturn<typeof getValue>

现在TheReturnType将具有getValue函数的返回类型。另请注意,在函数名称之前调用ExtractReturn帮助程序需要typeof运算符。

这是实现ExtractReturn帮助程序的完全不同的方法:

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

这个助手与上面的助手完全相同;重点是,实现这一目标的方法不止一种。