我尝试使用Flow输入以下代码
type Metadata = {
currentPage: string,
};
type State = {
result: {
metadata: Metadata,
}
}
type EmptyObject = {};
type Test = Metadata | EmptyObject;
class HelperFn {
state: State;
metadata: Test;
constructor(state: State) {
this.state = state;
if (state && state.result && state.result.metadata) {
this.metadata = state.result.metadata;
} else {
this.metadata = {};
}
}
getCurrentPageNumber() {
return this.metadata.currentPage;
}
}
我创建了稍后要分配的类型。在我的课堂上,我将类型Test分配给元数据。元数据可以是具有属性的对象,也可以是空对象。当声明函数
getCurrentPageNumber
时,linter Flow告诉我它cannot get 'this.metadata.currentPage' because property 'currentPage' is missing in EmptyObject
看起来Flow仅是指
emptyObject
。告诉Flow我的对象可以带有属性或只是空的正确语法是什么? 最佳答案
由于metaData
可以为空,因此Flow正确地告诉您this.metadata.currentPage
可能不存在。您可以将其包装在某种支票中,例如
if (this.metadata.currentPage) {
return this.metadata.currentPage
} else {
return 0;
}
为了使其正常工作。
关于javascript - 用Flowjs键入类的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53009976/