代码可以尝试一下here https://flow.org/try/#0C4TwDgpgBAMg9gYwIbAJZwHZQLxQN4BQUUANiqsAK4AmEAXFBpQLYBGEATgDRGmYDmFGvUYt2HAgF8oAMigAKQsRKJymACrgRAcgRxKGYBxDaexPQaMgGAZyOoM-KVAA++XiuRoNWhtrsoEKa8AcD0dhwOTpIAlAQEehh2UDZwzBDwXugYDJlqWLhKpORUtAwATAAMZnyOQmVQVTWe+ZqQfhaGxsHm+l3WUNoAqgDKAILaUvGJyfwQwHneGABqSCSU0LjyLUu5qksxtvaOOAB87sSoAGYKO9kAdHc+kDjYuLp9VtpxxMQc85QOFgnhh7p0rLwICQbBBeH8AUC+FlMPdQrDJEA
我有一个类型是联合类型的交集:
type Location = {
latitude: number,
longitude: number
} & ({
locationType: 'country',
country: string
} | {
locationType: 'state',
state:string
})
我有另一个函数,它基于其中一种联合类型执行某些操作:
const getLocationValue = (location: Location): string => {
if (location.locationType === 'country')
return location.country
else
return location.state
}
但是,这给了我错误:
财产country
。无法在交集类型的任何成员上访问属性
^ 财产state
。无法在交集类型的任何成员上访问属性
Flow 应该能够理解,如果 locationType 是国家/地区,那么它应该具有国家/地区属性。
我究竟做错了什么?
为了使用不相交的联合 https://flow.org/en/docs/types/unions/#toc-disjoint-unionsFlow 需要 2+ 种类型可供选择。目前您只定义了一种类型:Location
。您可以将公共值拆分为某种“抽象”类型,然后使Location
真正的类型联合,以便 Flow 能够在它们之间进行选择。它可能如下所示:
type AbstractLocation = {
latitude: number,
longitude: number,
}
type CountryLocation = AbstractLocation & {
country: string,
locationType: 'country',
}
type StateLocation = AbstractLocation & {
locationType: 'state',
state: string,
}
type Location = CountryLocation | StateLocation
Try it: 工作示例 https://flow.org/try/#0C4TwDgpgBAggRgZ2AJwIYGNgBkD27XACWOAdlALxQDeAUFFADYGHACuAJhAFxQmsC2cCMgA0dRqQDmLDt14ChomgF8aNUJCgBhHKxIoQufEVIVYiFBmx5mpgGTVx6XfuQgeSZIRKSx9BjYmJAAq4HIA5M56BuFiquphUADKwAQQRrZklPCeVhlBUA60-oHEIWE84UhpseLVwHKe3r4qahrQ+WVmOtFunaYAPsmpDf0kas4kSFAIOPzppaQ8Pa6Gi1mO-sxsnDwATAAMfhI+MrtQh8cBxmWhkJVRq7X0jwaVAKpJMOGtNJPTkgg1hupAAaqgGKxoJQABTXTI8MYASg8KGaFAAfJsoIQAGZQOHrAB08KCd2h5EokRcMSR4noyCBrGQZFJZSJrzc4ggDAQEHpUEZbBZEhBJCJ9X5yiAA在 flow.org 上
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)