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);