为什么空检查在func1中失败,而在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));
}
}发布于 2017-03-10 16:49:48
我不知道为什么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返回类型指示流,它应该查看函数的主体,以了解它传递的变量类型意味着什么。我相信这类功能的主体是有一些限制的。它甚至可能只需要返回一个表达式。不过,这应该给你足够的时间来做实验了。
https://stackoverflow.com/questions/42719354
复制相似问题