在下面的示例中(或在flow.org/try上),当我们通过另一个变量检查null/undefined时,类型细化似乎不起作用。如果通过另一个可行的方法检查null/undefined,则流类型细化不起作用
type Position = {|
x: number,
y: number
|}
function anotherCondition(): bool{
return true;
}
function getIt(): ?Position{
return {x:7, y: 8}
}
function setIt(p:Position){
}
const pos = getIt();
const isOk = pos && anotherCondition();
isOk && setIt(pos)
但是,如果我们这样做是没有内嵌变量isOk
,它工作正常。但我有几个地方来检查这种情况,并使用像isOk
这样的变量使其不那么冗长。有什么办法可以使它工作吗?或者我在这里错过了什么?
我希望它是可选的。这只是一个例子。在实际情况中,有些情况下'getIt'也可能返回null。 –
我已经添加了一个替代方案,您可以对我的回答进行操作 – MichaelDeBoey
问题在于流程的细化算法往往难以预测,如OP示例中所示。 – ftor