【问题标题】:What is the difference between (a: ?string) and (a?: string) in flow type?(a: ?string) 和 (a?: string) 在流类型中有什么区别?
【发布时间】:2018-10-11 06:08:27
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript reactjs flowtype


【解决方案1】:

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

a?: stringoptional property/paramerter - 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

【讨论】:

    【解决方案2】:

    a?: string 是一个optional parameter。来自文档:

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

    a: ?string 是一个maybe type。来自文档:

    JavaScript 代码通常会引入“可选”值,以便您可以选择省略该值或传递 null。

    ...

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

    所以主要区别似乎是您可以将null 用于可能类型,但不能用于可选参数。

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 2021-12-21
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多