在 TypeScript 中键入具有联合类型的数组?
Typing an Array with a union type in TypeScript?
我只是想知道是否可以使用联合类型来键入数组,这样一个数组就可以同时包含苹果和橙子,但不能包含其他任何东西。
类似
var arr : (Apple|Orange)[] = [];
arr.push(apple); //ok
arr.push(orange); //ok
arr.push(1); //error
arr.push("abc"); // error
不用说,上面的例子行不通,所以这可能是不可能的,或者我错过了什么?
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
}
根据 TS 2.3.4 就像
一样简单
let someArray: (typeA|typeB)[] = [
new typeA(),
new typeB()
]
我只是想知道是否可以使用联合类型来键入数组,这样一个数组就可以同时包含苹果和橙子,但不能包含其他任何东西。
类似
var arr : (Apple|Orange)[] = [];
arr.push(apple); //ok
arr.push(orange); //ok
arr.push(1); //error
arr.push("abc"); // error
不用说,上面的例子行不通,所以这可能是不可能的,或者我错过了什么?
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
}
根据 TS 2.3.4 就像
一样简单let someArray: (typeA|typeB)[] = [
new typeA(),
new typeB()
]