【问题标题】:Define flow type that excludes a particular type定义排除特定类型的流类型
【发布时间】:2017-07-18 21:05:54
【问题描述】:

我想要一个通用函数,它接受(() => T) | T 类型的参数,比如

const myGenericFunction = <T>(param: ((() => T) | T)): T => {
  if (typeof param === 'function') { return param(); }
  return param;
};

但是,在这种情况下,流不知道如果我传递了 () =&gt; 1 的参数,那么 Tnumber,而不是 () =&gt; number。我如何帮助 flow 理解 T 不应该是一个函数?

【问题讨论】:

  • 您能澄清一下您遇到的错误吗?看your test example,好像功能齐全。

标签: flowtype


【解决方案1】:

Flow 不包含“非”类型(例如$Not&lt;Function&gt;),所以我认为没有完全通用的方法可以做到这一点。但是,如果 T 只能是类型的子集,您可以使用绑定泛型来完成此操作:

const myGenericFunction = <T: number | string | {}>(
  param: ((() => T) | T)
): T => {
  if (typeof param === 'function') { return param(); }
  return param;
};

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 2023-02-14
    • 2013-06-28
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2017-10-09
    相关资源
    最近更新 更多