gpt4 book ai didi

javascript - 即使在类型细化之后,Flow 仍提示 undefined

转载 作者:行者123 更新时间:2023-11-30 21:06:15 25 4
gpt4 key购买 nike

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

如有任何帮助,我们将不胜感激!

最佳答案

arr.slice 的第一次调用“可能”将 thing.arr 变为 undefined,从而对 进行第二次调用slice 一个错误。 Flow 通过使细化无效来保护您免受这种可能性的影响。

您可以将 thing.arr 存储在 const 中并使用它(在所有三个位置)来避免潜在的错误。

关于javascript - 即使在类型细化之后,Flow 仍提示 undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46560490/

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