可以尝试使用代码here
我的类型是联合类型的交集:
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
。无法在交叉点类型的任何成员上访问属性
^ property state
。无法在交叉点类型的任何成员上访问属性
Flow应该能够理解,如果locationType是country,那么它应该有country属性。
我做错了什么?
答案 0 :(得分:3)
为了使用disjoint union Flow,需要2种类型才能选择。目前,您只定义了一种类型:Location
。您可以将常用值拆分为一种" abstract"键入并使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
在flow.org上试试:working example