您可以在flow.org/try查看代码,或者你可以看它在这里:流量甚至类型细化后抱怨未定义
/* @flow */
type Thing = {
arr?: Array<number>
}
const thing: Thing = {
arr: [10, 20, 30]
}
function getSubArray(thing: Thing, index: number) {
if (!thing.arr) return []
return [
...thing.arr.slice(0, index),
...thing.arr.slice(index + 1)
]
}
const newArr = getSubArray(thing, 1)
我认为做if (!thing.arr) return []
,将作为“类型精化”和流理解thing.arr
之后不是undefined
。然而,它给我一个错误说
16: ...thing.arr.slice(index + 1)
^call of method `slice`. Method cannot be called on possibly undefined value
16: ...thing.arr.slice(index + 1)
^undefined
任何帮助,将不胜感激!
当您删除数组文本中的第二个传播操作时,它会输入检查。我想这个第一次操作无论如何都会使优化无效。在所有情况下,使用Javascript正确推断类型可能很难或不可能,因为副作用可以在任何地方逐字执行。 – ftor
是的,我也注意到了。你认为解决这个问题的唯一方法是使用[类型转换](https://flow.org/en/docs/types/casting/)? – saadq