inheritance - 流 : types inheritance

标签 inheritance intersection flowtype type-alias

我正在为我的项目测试 FlowJS,我遇到了 Type Aliases 的问题.

我为 API 构建了一个 Web SDK:我有一个使用此方法的 Helper 类:

class Helper {
    find(filters:PaginationOptions = {}) {
        // ...
    }
}

PaginationOptions 是一个基本的 FlowJS 类型:

type PaginationOptions = {
  start?:string,
  end?:number,
};

我还有一个 Users 的帮助程序,它继承自 Helper:

class UsersHelper extends Helper {
    find(filters:UsersFilterOptions = {}) {
        // ...
    }
}

UsersFilterOptions 是一个 FlowJS 类型“扩展”PaginationOptions:

type UsersFilterOptions = {
  username?:string,
  city?:string,
} & PaginationOptions;

我在这里使用 Intersection这样我的用户过滤器也应该接受 startend 属性。

似乎我的 IDE (PHPStorm) 不喜欢我的 UsersHelper 类中的 find() 方法,它一直告诉我:

Incompatible override, should have type 'PaginationOptions'

嗯...我知道,这就是为什么 UsersFilterOptionsPaginationOptions 有交集。

但是 FlowJS 还向我显示了另外两个警告:

Flow: property username. Property not found in object literal
Flow: property city. Property not found in object literal

我不明白为什么会出现这些错误:这些属性被定义为可选...

对于修复这三个错误,您有什么建议吗?

提前致谢!

最佳答案

当你覆盖一个方法时,它的参数应该是基类中相应参数的父类(super class)型,所以你可以这样做:

class A {
  test(x: number) {
  }
}

class B extends A {
  test(x: number | string) {
  }
}

但是你不能这样做:

class A {
  test(x: number | string) {
  }
}

class B extends A {
  test(x: number) {
  }
}

关于inheritance - 流 : types inheritance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41805526/

相关文章:

javascript - 相当于 Flow 中的 TypeScript Record?

javascript - 流类型推断不起作用

Java 继承 - 可以简化将父类(super class)对象传递到子类的过程吗?

javascript - JavaScript 中的原型(prototype)链

c++ - 仅在类的第一个实例初始化时调用的成员函数 (C++)

geometry - 快速计算三角形与单位正方形的交面积

java - jackson 序列化 : how to ignore superclass properties

c# - 查找点是否与旋转的矩形相交?

optimization - R 优化 : How can I avoid a for loop in this situation?

javascript - 你能在运行时检查一个对象是否符合 Flow 类型吗?