2017-07-26 153 views
2

我在「或」類型中發現了奇怪的行爲。不知道,如果它是一個錯誤或功能... 我想實現的:我的變量應該只允許一個屬性'數據'的對象或一個屬性'記錄'的對象。但不是既有'數據'又有'財產'的對象。 所以:typescript 2.4.2「or」type strange behavior

type X = { 
    data: string 
}; 
type Y = { 
    records: { 
    [recordId: number]: { 
     [attributeName: string]: any, 
    } 
    }, 
}; 

type XorY = X | Y; 


let a:XorY = { 
    data: 'something', 
    records: { 
    12: { 
     someKey: 'someValue', 
    } 
    } 
}; 

在我看來,分配到應該拋出一個錯誤。任何想法,我如何在ts中做這樣的檢查?

+0

通常,'|'表示'或'和''^意味着XOR。其中'OR'包含在內,'XOR'是唯一的。你自己說這是'OR',所以我有點困惑,爲什麼你會認爲'XOR'會在這裏被使用?我可以看到有獨家工會的效用,但我認爲包容性工會更有用。考慮一下所有現有的JavaScript庫,它們都有可以接受字符串的函數或者一個元素。希望將您的支持添加到我關聯的github問題中,可以幫助他們瞭解該功能有多少興趣。 – AndyJ

回答

3

聯盟類型目前僅包含在內,也就是說,如果任何條件都是真實的,那麼它是匹配的。

目前無法創建專屬聯盟。

有一個開放的issue討論添加獨特的聯合,你可能想參加,如果這是你強烈渴望的功能。

提案:允許獨佔使用工會類型之間的邏輯或(^)運算符#14094