[英]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.