我正在为我的项目测试FlowJS,我遇到Type Aliases的问题。
我为API构建了一个Web SDK:我有一个使用此方法的Helper
类:
class Helper {
find(filters:PaginationOptions = {}) {
// ...
}
}
PaginationOptions
是一个基本的FlowJS类型:
type PaginationOptions = {
start?:string,
end?:number,
};
我还有一个帮助用户,继承自Helper
:
class UsersHelper extends Helper {
find(filters:UsersFilterOptions = {}) {
// ...
}
}
UsersFilterOptions
是FlowJS类型“扩展”PaginationOptions
:
type UsersFilterOptions = {
username?:string,
city?:string,
} & PaginationOptions;
我在这里使用了Intersection,因此我的用户过滤器也应该接受start
和end
属性。
我的IDE(PHPStorm)似乎不喜欢我的班级find()
中的UsersHelper
方法,它一直告诉我:
不兼容的覆盖,应该有'PaginationOptions'类型
嗯......我知道,这就是UsersFilterOptions
与PaginationOptions
交叉的原因。
但FlowJS还向我展示了另外两个警告:
流程:属性
username
。在对象文字中找不到的属性
流程:属性city
。在对象文字中找不到属性
我不明白为什么会出现这些错误:这些属性被定义为可选...
您有解决这三个错误的建议吗?
提前致谢!
答案 0 :(得分:3)
当你覆盖一个方法时,它的参数应该是基类中相应参数的超类型,所以你可以这样做:
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) {
}
}