为什么这种类型不检查,而它的变体却检查?

Why doesn't this type check, but a variation of it does?

我不确定这是否是一个错误,所以我想在这里问一下。

我的代码无法进行类型检查:

/* @flow */
declare type A = {
    code: ?number;
}

var a: A = {}

但是如果我创建一个与类型 A 具有相同签名的 class 并实例化它,那么它会进行类型检查:

/* @flow */
declare type A = {
    code: ?number;
}

class _A {
    code: ?number;
}

var a: A = new _A();

我在第一个变体上遇到的类型检查错误是这样的:

test.js:2:19,4:2: property code
Property not found in
test.js:6:13,14: object literal

我觉得这是一个错误,但我可能是错的。

我通过重新阅读文档弄明白了。可选属性的语法不是:

{code:?number}

而是:

{code?:number}

糟糕。