对使用'?'感到困惑在流动。 AFAIK(感谢flow type question mark before or after param?):
何时为'?' ':'之前表示bar是可选的,可以是字符串或未定义:
bar?: string
何时为'?'在':'之后,表示bar可能是类型,可以是字符串,未定义或null。
bar: ?string
我的问题是:在哪种情况下,第一种选择应该优先于第二种选择? bar?: ?string
怎么样?
流很难...
答案 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