a?: string
和 a: ?string
在Flow中有什么区别?
function concat(a: ?string, b: ?string): string {
}
vs
function concat(a?: string, b?: string): string {
}
a?: string
和 a: ?string
在Flow中有什么区别?
function concat(a: ?string, b: ?string): string {
}
vs
function concat(a?: string, b?: string): string {
}
a: ?string
是一个Maybe类型 - 在这种情况下实际上是string | null | void
。
a?: string
是一个可选属性/参数 - string | void
它们之间的区别在于,Maybe类型可以(除了类型本身)还可以是null
或void
,而可选参数只能是void
。
在调用带有可选或Maybe参数的函数时,function foo(a?: string)
或function(a: ?string)
- 在两种情况下都可以省略参数。
另一个区别在于对象属性 - 只有可选属性可以被省略:
type WithOptional = {
foo?: string;
}
type WithMaybe = {
foo: ?string;
}
const a: WithOptional = {}; // OK
const b: WithMaybe = {}; // Error