2
說我有下面的代碼:如何在TypeScript中區分兩種不同的對象類型?
function myFunction(x: { foo: number } | { bar: string }) {
我怎麼能寫一些代碼,以確定是否x
是第一或第二類型?
事情我已經考慮:
- 寫一個
x is MyType
功能來檢查foo
屬性。是的,我可以做到這一點,但對於僅用作單個函數參數的類型來說似乎過分了。 if ((x as { foo: number}).foo) { let y = x as { foo: number }
。我可以做到這一點,但它打敗了類型系統的觀點。- 給他們一個共同的
type
財產。同樣,對於僅用作一個函數參數的類型來說似乎是過度殺傷性的。
你也可以有原來的參數類型未修改如果喲你喜歡並在一個單獨的賦值中使用兼容的統一類型:'let tx:{foo?:number,bar ?: string} = x; if(typeof tx.foo!=='undefined'){...'。此外,從來沒有暗示聯合類型是不相交的 - x可能同時具有「foo」和「bar」。如果你想不相交,你必須在答案中使用確切的形式。 – artem
這很聰明。總有一天會有更好的解決方案出現,但現在看起來很合適。 – thedayturns