我正在为我的项目测试 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这样我的用户过滤器也应该接受 start
和 end
属性。
似乎我的 IDE (PHPStorm) 不喜欢我的 UsersHelper
类中的 find()
方法,它一直告诉我:
Incompatible override, should have type 'PaginationOptions'
嗯...我知道,这就是为什么 UsersFilterOptions
与 PaginationOptions
有交集。
但是 FlowJS 还向我显示了另外两个警告:
Flow: property
username
. Property not found in object literal
Flow: propertycity
. 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/