繁体   English   中英

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

[英]What is the difference between (a: ?string) and (a?: string) in flow type?

Flow中的? a?: stringa: ?string a?: string什么区别?

function concat(a: ?string, b: ?string): string {
}

VS

function concat(a?: string, b?: string): string {
}

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

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

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

当使用可选或可能的参数function foo(a?: string)function(a: ?string)调用函数时 - 在这两种情况下都可以省略参数。

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

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

const a: WithOptional = {}; // OK
const b: WithMaybe = {}; // Error

a?: string可选参数 来自文档:

可选参数将接受缺失, undefined或匹配类型。 但他们不会接受null

a: ?string是一种类型 来自文档:

JavaScript代码引入“可选”值是很常见的,这样您就可以选择省略值或传递null。

...

也许类型接受提供的类型以及nullundefined 那么?number表示numbernullundefined

因此,主要区别似乎是您可以对可能的类型使用null ,但不能为可选参数使用null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM