繁体   English   中英

FlowType:null检查失败

[英]FlowType: null check fails

为什么func1中的null检查失败,而在func2它是正常的

/* @flow */

const func1 = (arr?: Array<*>) => {
  const isArrayNotEmpty = arr && arr.length;

  if (isArrayNotEmpty) {
    arr.forEach((element) => console.log(element));
  }
}

const func2 = (arr?: Array<*>) => {
  if (arr && arr.length) {
    arr.forEach((element) => console.log(element));
  }
}

实例

我不知道Flow不支持这个的原因,但事实并非如此。 它目前要求对类型细化的检查实际上发生在if语句中,如果它们被抽象为单独的变量,则不会跟踪它们。

有一种替代方案可供您接受(我不确定它是否记录在任何地方):

/* @flow */

const func1 = (arr?: Array<*>) => {
  if (isArrayNotEmpty(arr)) {
    arr.forEach((element) => console.log(element));
  }
}

function isArrayNotEmpty(x: mixed): %checks {
  return x && x.length;
}

试用

特殊的%checks返回类型向Flow指示它应该查看函数体,以弄清楚它传递的变量类型意味着什么。 我相信对这种功能的身体有什么限制。 甚至可能只需返回单个表达式。 但是,这应该足以让你尝试它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM