type A = {
foo : string,
bar? : string,
}
type B = {
foo : string,
bar : string,
}
当类型B的对象被分配给类型A的道具时,它会触发错误。
如果我的情况是正常行为,我不理解这个选择,因为它与具有更多键的流句柄类型与指定类型不一致。
是否有解决方法使这项工作?或者它是糟糕设计的代名词?
答案 0 :(得分:1)
假设你有
var bObj: B = { foo: "", bar: "" };
var aObj: A = bObj;
问题是,如果允许这样做,那么
是有效的aObj.bar = undefined;
因为aObj
类型为A
,bar
类型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;