Reactjs 如何使用接口在流中键入函数参数

Reactjs 如何使用接口在流中键入函数参数,reactjs,flowtype,Reactjs,Flowtype,我正在尝试实现一个React组件,它包含一个选项列表,并显示它们的id和name。我希望该组件可以重用,因此我定义了一个接口选项,以确保始终提供必需的字段 问题来了:如果我传递的任何类型的字段多于2个{id,name,/*anything*/},流就会抱怨。在流中不可能使用这样的接口吗 以下是最基本的相关代码: 接口选项{ id:string, 名称:string } 常量列表=(选项:选项[])=>{ options.forEach(o=>null) } 类型实现选项={ id:string,

我正在尝试实现一个React组件,它包含一个选项列表,并显示它们的
id
name
。我希望该组件可以重用,因此我定义了一个接口
选项
,以确保始终提供必需的字段

问题来了:如果我传递的任何类型的字段多于2个
{id,name,/*anything*/}
,流就会抱怨。在流中不可能使用这样的接口吗

以下是最基本的相关代码:

接口选项{
id:string,
名称:string
}
常量列表=(选项:选项[])=>{
options.forEach(o=>null)
}
类型实现选项={
id:string,
名称:string,
描述:字符串
}
施工计划:实施方案[]=[]
清单(图)
错误:

无法调用绑定到
选项的
计划
列表
,因为
选项
中缺少属性
说明
,但存在于数组元素的
实现选项
[2]中

尝试铸造:

列表((计划:选项[])
还有课程:

类ComplexOption实现选项{
id:字符串
名称:string
}
常数complexOptions:ComplexOption[]=[]
列表(复合选项)
似乎什么都不管用


所有这些代码片段已经有了一个完整的列表。

想象一下我们有一个
实现操作的列表:
[{id:'id',name:'name',description:'description'},…]
。现在,我们将其传递到
List
函数中,该函数具有签名
选项[]=>void
。从
列表
的角度来看,这是完全有效的,因为
实现选项
选项
的超类型。但是,
List
函数不能保证它不会修改传入的列表。因此,函数可以将类型为
Option
的元素添加到列表中,该元素对
选项[]
有效,但对
实现选项[]
无效

要解决此问题,可以将
计划
作为
$ReadOnlyArray
键入,这会告诉Flow
列表
函数不会修改元素()


参考问题,或获取更多信息。

假设我们有一个
实现操作的列表:
[{id:'id',name:'name',description:'description'},…]
。现在,我们将其传递到
List
函数中,该函数具有签名
选项[]=>void
。从
列表
的角度来看,这是完全有效的,因为
实现选项
选项
的超类型。但是,
List
函数不能保证它不会修改传入的列表。因此,函数可以将类型为
Option
的元素添加到列表中,该元素对
选项[]
有效,但对
实现选项[]
无效

要解决此问题,可以将
计划
作为
$ReadOnlyArray
键入,这会告诉Flow
列表
函数不会修改元素()


参考问题,或获取更多信息。

{}
不是
实现操作的类型,因为它缺少
id
名称和
说明
,为什么您希望它正常?好的,我将修复该代码段。然而,这不是这个特殊情况下的问题。
{}
不是
实现操作的类型,因为它缺少
id
名称和
描述,为什么您希望它可以?好的,我会修复这个代码段。但是,这不是这个特殊案例的问题。太好了!谢谢!太棒了!谢谢!