Reactjs 流类型和多态性

Reactjs 流类型和多态性,reactjs,react-native,flowtype,Reactjs,React Native,Flowtype,下面的组件采用字段对象数组。字段类由SelectboxField扩展(和其他字段,但这是目前代码中的字段)。组件确定字段的类型并呈现该字段的特定组件。特定组件,例如SelectboxFieldView将特定类型的字段(SelectboxField)作为道具 /@flow 从“React”导入React,{Component}; 从“react native”导入{Text,View}; 从“./型号/字段/字段”导入字段; 从“./components/SelectboxFieldView”导入

下面的组件采用
字段
对象数组。
字段
类由
SelectboxField
扩展(和其他字段,但这是目前代码中的字段)。组件确定字段的类型并呈现该字段的特定组件。特定组件,例如
SelectboxFieldView
将特定类型的字段(
SelectboxField
)作为道具

/@flow
从“React”导入React,{Component};
从“react native”导入{Text,View};
从“./型号/字段/字段”导入字段;
从“./components/SelectboxFieldView”导入SelectboxFieldView;
从“./models/fields/SelectboxField”导入SelectboxField;
类型Props={fields:Field[]};
类型State={};
类FieldsRenderer扩展了组件{
render(){
常量模拟字段=[
this.props.fields.find(f=>f.type==“selectbox”)| |新字段()
]; 
//常量字段=this.props.fields
常量字段=模拟字段
返回(
{fields.map((字段,i:number)=>{
开关(字段构造函数){
案例选择框字段:
const selField:SelectboxField=field;//此处出错
回来
违约:
返回一个字段;
}
})}
);
}
}
导出默认字段描述符;
我在word
字段
上指示的行上得到一个流量错误,表示:

Cannot assign field to selField because Field is incompatible with SelectField`
无论是否使用
selField
的显式类型定义,都会出现此错误

我还尝试了类型转换表达式:

开关(字段构造函数){
案例选择框字段:
(字段:SelectboxField);
回来
但它表示“无法将字段强制转换为SelectboxField,因为该字段与SelectboxField不兼容`

这似乎不对:

/@flow
类字段{
标题:字符串;
类型:字符串;
静态fromApiFormInfo(formInfo:Object):字段{
常量字段=新字段();
field.title=formInfo.title;
field.type=formInfo.type;
返回字段;
}
}
导出默认字段;
/@flow
从“/Field”导入字段;
类SelectboxField扩展字段{
占位符:字符串;
选项:字符串[];
静态fromApiFormInfo(formInfo:Object):SelectboxField{
const base=new SelectboxField();
const baseField=super.fromApiFormInfo(formInfo);
常量字段:SelectboxField=Object.assign(base,{…baseField});
field.options=formInfo.options;
field.placeholder=formInfo.placeholder\u文本;
返回字段;
}
}
导出默认SelectboxField;
有没有办法处理这个问题

switch (field.constructor) {
  case SelectboxField:
不是Flow可以处理为的,以便理解
字段
SelectboxField

if (field instanceof SelectboxField) {
  return <SelectboxFieldView key={i} field={field} />;
} else {
  return <Text key={i}>A Field</Text>;
}
if(SelectboxField的字段实例){
回来
}否则{
返回一个字段;
}

你的错误提到了
SelectField
,但是你在这里的帖子都是关于
SelectboxField
。这是个问题吗?如果你能删减一个可以重现的例子,那就太好了。一定是我在抄写错误时弄错了谢谢,这很有效!这太糟糕了,因为
开关太多了清洁剂。