我尝试使用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/

10-10 01:39