除了类型注释之外,这两个对象是相同的。两者都将属性x
初始化为null。第二个明确注释为null
。但是,flow仅报告第一个对象的get()
方法的错误。
为什么会这样?
var obj1 = {
x: null,
get() {
return this.x.a.b.c;
}
};
var obj2: {
x: null,
get: () => number
} = {
x: null,
get() {
return this.x.a.b.c;
}
};
module.exports = function () {
return obj1.get() + obj2.get();
};
该错误仅在obj1.get上,是
return this.x.a.b.c;
^ property `a`. Property cannot be accessed on possibly null value
return this.x.a.b.c;
^^^^^^ null
如果x
被输入为联盟,我会得到相同的结果,例如null | number
。