1
我正在與the following type definitions inside of Flow's try tool一起工作,我看到使用嵌套在工會內部的交叉點時有點奇怪的行爲。期待類型錯誤工會與交叉點
type Transition = SimpleTransition | BranchingTransition | LoopingTransition;
type SimpleTransition = {
type: 'transition',
next?: string
}
type BranchingTransition = SimpleTransition & {
branch: Branch[]
}
type LoopingTransition = SimpleTransition & {
loop: Loop
}
type Branch = {
to: string,
when: string
}
type Loop = {
limit: number
}
我期待看到一個類型的錯誤,當我試圖創建一個Transition
包含一個不匹配的屬性的它的聯合類型之一。
let t: Transition = {
type: 'transition',
branch: false // <- expecting type error (boolean != Branch[])
}
我希望在branch
財產列入將使類型檢查要檢查BranchingTransition
這個對象(然後找到boolean
和Branch[]
之間的類型不匹配,而是它似乎只是算作一個SimpleTransition
與外來屬性。
我想知道這是否只是因爲SimpleTransition
是第一個聯合類型,它是能夠與統一,但在工會改變類型的順序似乎沒有任何效果。
有趣的是,當我從工會移除SimpleTransition
時,它工作得很好(although the error message is somewhat confusing)。有沒有一種方法來構造這些類型以防止發生這種問題?