您可以在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