定义排除特定类型的流类型

时间:2017-07-18 21:05:55

标签: flowtype

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

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

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

1 个答案:

答案 0 :(得分:0)

Flow不包含&#34; not&#34;类型(例如$Not<Function>),所以我不认为这是完全通用的方法。但是,如果T只能是类型的子集,则可以使用绑定泛型来完成此操作:

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