密封/协变对象和$ Exact + $ ReadOnly之间有什么区别?

时间:2018-05-31 12:44:43

标签: javascript flowtype

之间有什么区别:

type MovieType = {|
  +blob?: string,
  +name: string,
  +url?: string
|};

type MovieType = $Exact<$ReadOnly<{
  blob?: string,
  name: string,
  url?: string
}>>;

我想知道是否对待对象的方式不同,取决于它们的定义方式,或者前者只是后者的语法糖。

1 个答案:

答案 0 :(得分:0)

这两种对象类型应该是等价的。

$ReadOnly<T>使所有属性协变:

  

$ ReadOnly是一种表示a的只读版本的类型   给定对象类型T.只读对象类型是一种对象类型   键都是只读的。

     

这意味着以下两种类型是等效的:

type ReadOnlyObj = {
  +key: any,  // read-only field, marked by the `+` annotation
};

type ReadOnlyObj = $ReadOnly<{
  key: any,
}>;

$Exact<T>获取一个不精确的对象并使其准确无误:

  

$ Exact&lt; {name:string}&gt;是{|的同义词name:string |},如Object文档中所示。