可选的键类型,不能通过本机中的反应来理解

时间:2018-05-30 17:18:04

标签: reactjs react-native-android flowtype

type A = { 
  foo : string,
  bar? : string,
}

type B = {
   foo : string,
   bar : string,
}

当类型B的对象被分配给类型A的道具时,它会触发错误。

如果我的情况是正常行为,我不理解这个选择,因为它与具有更多键的流句柄类型与指定类型不一致。

是否有解决方法使这项工作?或者它是糟糕设计的代名词?

1 个答案:

答案 0 :(得分:1)

假设你有

var bObj: B = { foo: "", bar: "" };
var aObj: A = bObj;

问题是,如果允许这样做,那么

是有效的
aObj.bar = undefined;

因为aObj类型为Abar类型undefined的对象允许为A。如果允许,您正在修改bObj对象,它实际上不再与B的类型定义匹配。

  

是否有解决方法使这项工作?

有!您需要告诉Flow您的对象中允许 variance 。在这种情况下,您需要更改

bar?: string,

+bar?: string,

意味着对于A类型的对象,bar属性应被视为只读,这意味着上述问题不再是问题。

完整示例:

type A = { 
  foo : string,
  +bar?: string,
};
type B = {
   foo : string,
   bar : string,
};

var bObj: B = { foo: "", bar: "" };
var aObj: A = bObj;

On Flow.org/try