typescript - 为什么 Flow 不根据函数的返回值推断函数的类型?

标签 typescript flowtype

我希望这段代码能进行类型检查 in Flow就像它一样in TypeScript :

var onClick : (() => void) | (() => boolean);
onClick = () => { return true; }

相反,我收到此错误:

4: onClick = () => { return true; }
             ^ function. Could not decide which case to select
3: var onClick : (() => void) | (() => boolean);
                  ^ union type

这个设计决策是否有一个通用名称,其背后的原因是什么?

是否可以要求 Flow 检查器从 return 语句推断函数的返回类型?

最佳答案

您需要提供一个显式转换,例如:

type FuncV = () => void;
type FuncB = () => boolean;
var onClick : FuncV | FuncB;

onClick = (() => { return true; }: FuncB);

或者使用存在类型,例如:

type Func<T: (void | string)> = () => T;
var f: Func<*>;

f = () => { return "hello"; };
var msg = f() + " world!";  // type checks against return value above

关于typescript - 为什么 Flow 不根据函数的返回值推断函数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44979210/

相关文章:

javascript - 如何在 Javascript 中将焦点添加到 childNodes

javascript - 如何防止 typescript 将动态导入转换为require()?

reactjs - 未捕获的 DOMException : Failed to execute 'pushState' on 'History' : function () { [native code] } could not be cloned

javascript - 调用具有多个参数的函数的更简单方法?

redux - 如何避免使用文字字符串来缩小流程中不相交的联合

git - 我应该在 git 中保留 flow-typed/npm 文件夹版本吗?

javascript - 如何使 HostListener 用于滚动工作?

javascript - 从未标记 @flow 的导入文件中获取类型定义

reactjs - 流量: How do I type-annotate a local/global variable?

regex - 排除 OCaml RegEx 中的特定单词