gpt4 book ai didi

javascript - if 流中的分支

转载 作者:行者123 更新时间:2023-12-03 02:57:25 24 4
gpt4 key购买 nike

为什么以下类型不在 Flow 中进行类型检查:

var v: number = (function() {if (true) return 0;})();

尝试一下 here .

我知道以下修复方法:

  • 通过删除if (true)
  • 将返回类型更改为 ?number
  • 通过编写 if (true) return 0;否则抛出新的Error()
  • 通过消除警告。

我的问题是:

(a) Flow 以这种方式实现的原因是什么?

(b)解决此问题最惯用的方法是什么?

我还了解到,在一般情况下,if 条件不能静态计算,并且 if 条件静态计算为 truefalse 不应出现在生产代码中。但 Flow 是一个类型检查器,而不是一个编码风格强制器,对吗?

此外,我仍然认为这种模式可能出现的合理情况。例如:

var someCondition;
someCondition = true;
if (someCondition) {
var v: number = (function() {
if (someCondition)
return 1;
})();
}

尝试一下 here .

最佳答案

Flow 不会对实际运行时代码进行静态分析,因此它不知道 if (true) 意味着 else 分支不执行。您必须编写代码,以便清楚地使用代码作为 Flow

var v: number = (function() {
if (true) return 0;
throw new Error();
})();

您的 throw 可能永远不会运行,但它让 Flow 清楚地知道它要么返回一个数字,要么抛出异常。

关于javascript - if 流中的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47558655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com