流类型问号?

时间:2018-07-05 01:32:40

标签: javascript flowtype

对使用'?'感到困惑在流动。 AFAIK(感谢flow type question mark before or after param?):

  1. 何时为'?' ':'之前表示bar是可选的,可以是字符串或未定义: bar?: string

  2. 何时为'?'在':'之后,表示bar可能是类型,可以是字符串,未定义或null。 bar: ?string

我的问题是:在哪种情况下,第一种选择应该优先于第二种选择? bar?: ?string怎么样?

流很难...

1 个答案:

答案 0 :(得分:5)

可选表示可以省略该属性。看这个例子:

type Foo = {
  optional?: string
}

const foo: Foo = {}; // OK

type Bar = {
  maybe: ?string;
}

const bar: Bar = {}; // Error: `maybe` is missing in object literal

关于可选和可能的组合-允许将null分配给可选属性:

type Baz = {
  maybeAndOptional?: ?string;
}

let baz: Baz = {}; // OK
baz = { maybeAndOptional: null }; // OK

type Foo = {
  optional?: string
}

let foo: Foo = {}; // OK
foo = { optional: null } // Error: null is incompatible with string