Redux 流:使用ExtractReturn的函数类型

Redux 流:使用ExtractReturn的函数类型,redux,flowtype,boilerplate,Redux,Flowtype,Boilerplate,我正试图减少redux用flow键入的代码样板 特别是,我希望避免手动定义动作类型,但让流使用提取返回技巧从类型的动作创建者推断动作类型(如或中所述): 类型B>=B; 类型ExtractReturn=\u ExtractReturn; 但它不会捕获简单的错误,例如,它应该捕获action.id是一个number而不是string: 如果操作是“手动”定义的,则会捕获错误: 如何在reducer函数中正确捕获所有错误,而无需手动编写样板代码 编辑:修复了尝试流程链接 编辑:我没有注意到Sha

我正试图减少
redux
flow
键入的代码样板

特别是,我希望避免手动定义
动作类型
,但让
使用
提取返回
技巧从
类型的动作创建者
推断动作类型(如或中所述):

类型B>=B;
类型ExtractReturn=\u ExtractReturn;
但它不会捕获简单的错误,例如,它应该捕获
action.id
是一个
number
而不是
string

如果操作是“手动”定义的,则会捕获错误:

如何在
reducer
函数中正确捕获所有错误,而无需手动编写样板代码

  • 编辑:修复了尝试流程链接
  • 编辑:我没有注意到Shane Osbourne post提供了一个似乎有效的
    流程尝试
    。看看它。事实上,它也有同样的问题。试着在帖子上写一条评论来暗示它。见评论

如果您感兴趣,我设法让Flow捕捉到您的示例没有捕捉到的错误

毫无疑问,这很粗糙。我是从你那里得到这个主意的

除此之外,我无法提供更多的见解。我自己也在寻找更好的解决办法

编辑:在进一步挖掘之后,我发现
$Call
实用程序类型可以帮上一点忙:

type Action =
  | $Call<typeof get, number>
  | $Call<typeof del, number>
  | $Call<typeof set, number, string>
类型动作=
|美元电话
|美元电话
|美元电话
在这之后,也许值得将
$Call
模式抽象为自己的参数化类型。然而,我在这个时间点上对流动的了解是有限的,所以我的几次尝试并没有取得成果


.

从0.72版本开始,您的
流尝试
被捕获
type Action =
  | $Call<typeof get, number>
  | $Call<typeof del, number>
  | $Call<typeof set, number, string>