web-dev-qa-db-ja.com

TypeScriptで共用体型の配列を入力しますか?

配列を共用体型で入力して、1つの配列にAppleとOrangesの両方を含めることができ、それ以外は何も含めることができないかどうか疑問に思っていました。

何かのようなもの

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

arr.Push(Apple); //ok
arr.Push(orange); //ok
arr.Push(1); //error
arr.Push("abc"); // error

言うまでもなく、上記の例は機能しないため、これは不可能な場合がありますか、それとも何かが足りませんか?

16
daniel.sedlacek
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
}
22
danielnixon