这个问号在 Flow: "?() => void" 中是什么意思

What does this question mark mean in Flow: "?() => void"

GitHub project 我最近看到这个函数声明:

function configureStore(onComplete: ?() => void) {

这个问号是关于什么的?

我猜,onComplete 是命名参数,获取函数调用。问号表示此参数可以是可选的,默认为 "void",这与 nil/null 指针的含义相同,这意味着此处分配的 "no closure"。

我说得对吗?

差不多。

() => void 是 Fl​​ow 对函数的注释 returns 什么都没有(undefined,又名 void 0)。

?MyType 中的前导问号是 Flow 表达可空类型的方式。

所以在这种情况下 configureStore 接受一个名为 onComplete 的参数,该参数必须为 null 或 returns 没有的函数。

Flow 不会为 onComplete 添加默认值或以任何方式强制它,因为与打字稿不同,Flow 不会生成任何新的 JS 代码。在运行时,所有 Flow 注释都被剥离以获得普通 JS,仅此而已。