首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlowType:空检查失败

FlowType:空检查失败
EN

Stack Overflow用户
提问于 2017-03-10 13:17:46
回答 1查看 277关注 0票数 6

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

代码语言:javascript
复制
/* @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));
  }
}

实例化

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-10 16:49:48

我不知道为什么Flow不支持它,但它不支持。它目前要求检查类型细化实际上发生在if语句中,如果它们被抽象到一个单独的变量中,就不会跟踪它们。

有一种可能为您所接受的选择(我不确定它是否在任何地方都有文档):

代码语言:javascript
复制
/* @flow */

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

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

(梯级流)

特殊的%checks返回类型指示流,它应该查看函数的主体,以了解它传递的变量类型意味着什么。我相信这类功能的主体是有一些限制的。它甚至可能只需要返回一个表达式。不过,这应该给你足够的时间来做实验了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42719354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档