在TypeScript中键入具有联合类型的数组?

dan*_*cek 14 typescript typescript1.4

我只是想知道是否可以键入具有联合类型的数组,因此一个数组可以包含苹果和橙子,但没有别的.

就像是

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

arr.push(apple); //ok
arr.push(orange); //ok
arr.push(1); //error
arr.push("abc"); // error
Run Code Online (Sandbox Code Playgroud)

针说上面的例子不起作用所以这可能是不可能的,或者我错过了什么?

dan*_*xon 22

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
}
Run Code Online (Sandbox Code Playgroud)


Tom*_*mas 10

根据 TS 2.3.4 就像这样简单

let someArray: (typeA|typeB)[] = [
  new typeA(),
  new typeB()
]
Run Code Online (Sandbox Code Playgroud)