流类型中的(a:?string)和(a ?: string)之间有什么区别?

Roh*_*han 4 javascript reactjs flowtype

a?: stringa: ?stringFlow 之间有什么区别?

function concat(a: ?string, b: ?string): string {
}
Run Code Online (Sandbox Code Playgroud)

function concat(a?: string, b?: string): string {
}
Run Code Online (Sandbox Code Playgroud)

Ale*_* L. 6

a: ?stringMaybe类型 -实际上string | null | void在这种情况下。

a?: string可选属性 / 参数 -string | void

它们之间的区别在于,也许类型也可以是(除了类型本身之外)nullvoid,并且只能是可选参数void

当调用带有可选参数或可能带有参数function foo(a?: string)function(a: ?string)-的参数时,可以省略参数。

对象属性的另一个区别是-只能省略可选属性:

type WithOptional = {
  foo?: string;
}
type WithMaybe = {
  foo: ?string;
}

const a: WithOptional = {}; // OK
const b: WithMaybe = {}; // Error
Run Code Online (Sandbox Code Playgroud)