wiz*_*loy 6 javascript flowtype
为什么空检查失败的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));
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道 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;
}
Run Code Online (Sandbox Code Playgroud)
(尝试流程)
特殊的%checks返回类型向 Flow 指示它应该查看函数体,以找出它所传递的变量类型的含义。我相信这样的函数体内可以包含的内容有一些限制。甚至可能是它只需要返回单个表达式的情况。不过,这应该足以让您进行实验。
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |