Flowtype 向类类型的并集添加静态变量
我试图表示类型“一个Flowtype 向类类型的并集添加静态变量,flowtype,Flowtype,我试图表示类型“一个Base1或Base2的子类,并添加一个静态属性foo:string” 我尝试了以下操作,但出现错误: /@flow 类Base1{} 类Base2{} 类Foo扩展了Base1{ 静态foo=“hi” } IBase类型=类|类; 输入IFoo=IBase&{+foo:string} (Foo:IFoo);//无误 函数getFoo():IFoo{ 返回Foo;//没有错误 } (getFoo():IFoo);//错误 无法将getFoo()强制转换为IFoo,因为Ba
Base1
或Base2
的子类,并添加一个静态属性foo:string
”
我尝试了以下操作,但出现错误:
/@flow
类Base1{}
类Base2{}
类Foo扩展了Base1{
静态foo=“hi”
}
IBase类型=类|类;
输入IFoo=IBase&{+foo:string}
(Foo:IFoo);//无误
函数getFoo():IFoo{
返回Foo;//没有错误
}
(getFoo():IFoo);//错误
无法将getFoo()
强制转换为IFoo
,因为Base2
[1]与Base1
[2]不兼容。或对象类型[3]与Base1
[4]的静态不兼容。或者Base1
[2]与Base2
[1]不兼容。或对象类型[3]与Base2
[5]的静态不兼容
我可以通过删除&{+foo:string}
或删除|Class
来修复错误,但这些都是我想要表示的类型的关键要求
看起来问题的症结可能是“对象类型与
Base1
的静态不兼容”。有没有其他技术可以用来添加静态属性?不理解这里的逻辑,但出于某种原因,这似乎是可行的:
type IFoo = IBase & {+foo: string};
type IFoo2 = Class<Base1> & {+foo: string} | Class<Base2> & {+foo: string};
(Foo: IFoo); // no error
function getFoo(): IFoo2 { // change return type to IFoo2
return Foo; // no error
}
(getFoo(): IFoo); // huh?
(getFoo(): IFoo2);
type-IFoo=IBase&{+foo:string};
类型IFoo2=Class&{+foo:string}| Class&{+foo:string};
(Foo:IFoo);//无误
函数getFoo():IFoo2{//将返回类型更改为IFoo2
返回Foo;//没有错误
}
(getFoo():IFoo);//呵呵?
(getFoo():IFoo2);
在过去,我遇到过使用交集类型的并集与使用交集类型的交集的类似问题,通常只是尝试其中一种,直到它起作用。这看起来像个bug。只要看看类型,
getFoo()
就会返回IFoo
,因此您应该总是能够说(getFoo():IFoo)代码>不管IFoo
到底是什么。
type IFoo = IBase & {+foo: string};
type IFoo2 = Class<Base1> & {+foo: string} | Class<Base2> & {+foo: string};
(Foo: IFoo); // no error
function getFoo(): IFoo2 { // change return type to IFoo2
return Foo; // no error
}
(getFoo(): IFoo); // huh?
(getFoo(): IFoo2);