Types 使用流将两种类型相交的正确方法

Types 使用流将两种类型相交的正确方法,types,flowtype,Types,Flowtype,我最近学习了如何在流中相交类型。我很好奇有什么区别 在以下两种相交两种对象类型的方法之间: 假设我有以下两种类型要相交 type A = { foo: string } type B = { bar: boolean } 我想将它们相交,创建一个C型,看起来像这样 type C = { foo: string, bar: boolean } 方法1: type C = A & B 方法2: type C = {...A, ...B} 这些方法是等效的吗?不,

我最近学习了如何在流中相交类型。我很好奇有什么区别 在以下两种相交两种对象类型的方法之间:

假设我有以下两种类型要相交

type A = {
   foo: string
}

type B = {
   bar: boolean
}
我想将它们相交,创建一个C型,看起来像这样

type C = {
  foo: string,
  bar: boolean
}
方法1:

type C = A & B
方法2:

type C = {...A, ...B}

这些方法是等效的吗?不,它们不是等效的

首先,我想不出什么情况下
&
有用(因为它坏了)。我建议总是使用spread

如果您的类型不精确,则:排列使所有属性都是可选的。您可以使用
$Exact
实用程序修复它

正确的方法是将所有类型声明为精确的。Flow有一个配置选项,可以在将来使用它。但是,
&
具有确切的类型,而spread则具有


交叉点的结果是类型。

感谢您提供的详细信息和flow repl!>基本区别:如果您的类型不精确,则“排列”使所有属性都是可选的。您可以使用$Exact实用程序修复它。从0.106开始,情况并非如此。如果流不能可靠地推断出精确的类型,而不是推断出可选/混合属性,则流将出错。看,谢谢,这是有用的补充!