【问题标题】:How to get a function's return type in flow?如何在流中获取函数的返回类型?
【发布时间】:2017-11-25 19:43:38
【问题描述】:

用这个例子:

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

【问题讨论】:

  • getValue返回一个MyType的类型,那你就不能把nextObj的类型设置为MyType吗?还是我误会了?
  • 我认为没有办法做到这一点。也不能保证给定的函数只有一种类型。许多函数根据其输入参数有不同的类型。
  • @loganfsmyth 很多可能的类型都可以表示为这些类型的并集,即单一类型!
  • 可以,但我不确定这在大多数情况下是否超级有用。
  • @saadq 当然在这种情况下这是可能的,但不是我的目标。我想获得任何外部函数的返回类型,而不事先知道该类型是什么。 (实际用例:redux 的 mapStateToProps 选择器)

标签: flowtype


【解决方案1】:

Flow 有一个$Call 实用程序类型,可以获取函数的返回类型:

type TheReturnType = $Call<typeof getValue>

但是,如果您的函数需要参数,您还需要为它们提供类型:

type TimeoutType = $Call<typeof setTimeout, () => void, number>

如果这看起来不方便,您可以编写一个 ReturnType 帮助程序来跳过对参数的需求:

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

让我们使用这个:

type TheReturnType = ReturnType<typeof setTimeout>

这个ReturnType 助手基本上与TypeScript 中的ReturnType 助手匹配。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-07-01
  • 2018-11-06
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2018-04-09
  • 1970-01-01
相关资源
最近更新 更多