为什么流量抛出错误?
type MaybeProp = {
prop: ?number,
}
type DefinetlyProp = {
prop: number,
}
const requireMaybe = (u: MaybeProp) => console.log(u)
const requireDefinetly = (u: DefinetlyProp) => requireMaybe(u)
似乎一个可以处理可能属性的函数也应该能够在它们被明确定义时处理相同的属性。
有什么方法可以解决这个问题吗?
答案 0 :(得分:2)
这是因为JS中的对象是可变的。就类型系统而言,requireMaybe
可以执行u.prop = null
。然后,原始调用者期望prop
为number
,但实际上是null
。这会打破类型安全。
您可以使用property variance:
完成您想要的工作type MaybeProp = {
+prop: ?number,
}
type DefinetlyProp = {
+prop: number,
}
const requireMaybe = (u: MaybeProp) => console.log(u)
const requireDefinetly = (u: DefinetlyProp) => requireMaybe(u)