用Flowjs键入类的问题

时间:2018-10-26 13:35:27

标签: javascript flowtype

我尝试使用 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时,lint Flow告诉我它

cannot get 'this.metadata.currentPage' because property 'currentPage' is missing in EmptyObject

像Flow一样仅指emptyObject。告诉Flow我的对象可以带有属性或只是空的正确语法是什么?

1 个答案:

答案 0 :(得分:0)

由于metaData可以为空,因此Flow正确地告诉您this.metadata.currentPage可能不存在。您可以将其包装在

之类的支票中
if (this.metadata.currentPage) {
    return this.metadata.currentPage
} else {
    return 0;
}

要使其正常工作。