Pertanyaan Mengetik Array dengan tipe union di TypeScript?


Saya hanya ingin tahu apakah mungkin untuk mengetikkan array dengan jenis union, sehingga satu array dapat berisi Apel dan Jeruk tetapi tidak ada yang lain.

Sesuatu seperti

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

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

Jarum untuk mengatakan contoh di atas tidak berfungsi jadi ini mungkin tidak mungkin, atau saya kehilangan sesuatu?


5
2018-04-22 09:58


asal


Jawaban:


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
}

11
2018-04-22 10:11