使用 Maybe props 的类型不允许使用 Non-Maybe props 的类型
type with Maybe props doesn't allow type with Non-Maybe props
为什么流会在这里抛出错误?
type MaybeProp = {
prop: ?number,
}
type DefinetlyProp = {
prop: number,
}
const requireMaybe = (u: MaybeProp) => console.log(u)
const requireDefinetly = (u: DefinetlyProp) => requireMaybe(u)
似乎可以处理属性的函数也应该能够处理定义明确定义的相同属性。
有什么办法解决这个问题?
这是因为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)
为什么流会在这里抛出错误?
type MaybeProp = {
prop: ?number,
}
type DefinetlyProp = {
prop: number,
}
const requireMaybe = (u: MaybeProp) => console.log(u)
const requireDefinetly = (u: DefinetlyProp) => requireMaybe(u)
似乎可以处理属性的函数也应该能够处理定义明确定义的相同属性。
有什么办法解决这个问题?
这是因为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)