2015-04-22 23 views
4

我只是想知道是否可以使用聯合類型鍵入數組,以便一個數組可以同時包含蘋果和橙子,但沒有別的。在TypeScript中使用聯合類型鍵入數組?

喜歡的東西

var arr : (Apple|Orange)[] = []; 

arr.push(apple); //ok 
arr.push(orange); //ok 
arr.push(1); //error 
arr.push("abc"); // error 

不用說上面的例子不工作,所以這是不可能的,還是我失去了一些東西?

回答

10
class Apple { 
    appleFoo: any; 
} 

class Orange { 
    orangeFoo: any; 
} 

var arr : Array<Apple|Orange> = []; 

var apple = new Apple(); 
var orange = new Orange(); 

arr.push(apple); //ok 
arr.push(orange); //ok 
arr.push(1); //error 
arr.push("abc"); // error 

var something = arr[0]; 

if(something instanceof Apple) { 
    something.appleFoo; //ok 
    something.orangeFoo; //error 
} else if(something instanceof Orange) { 
    something.appleFoo; //error 
    something.orangeFoo; //ok 
} 
+0

該定義不會引發錯誤,但您既不能訪問Apple也不能訪問橙色的任何屬性 –

+0

我已更新答案以包含類型警戒示例。 – danielnixon

+0

這很有趣。我犯了一個錯誤,那就是Apple和Orange是界面,而不是類,但是你不能爲界面輸入防護,所以你無法觸及屬性。謝謝。 –

相關問題