gpt4 book ai didi

javascript - FlowType:空检查失败

转载 作者:数据小太阳 更新时间:2023-10-29 05:24:54 25 4
gpt4 key购买 nike

为什么空值检查在 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));
}
}

Live example

最佳答案

我不知道 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;
}

( tryflow )

特殊的 %checks 返回类型向 Flow 指示它应该查看函数的主体以弄清楚它所暗示的关于传递给它的变量类型的含义。我相信对于这样一个函数的主体中可以包含什么有一些限制。甚至可能只需要返回一个表达式。不过,这应该足以让您进行试验。

关于javascript - FlowType:空检查失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42719354/

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