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

标签 typescript typescript1.4

我只是想知道是否可以使用联合类型对数组进行类型化,这样一个数组就可以同时包含苹果和橙子,但不能包含其他任何东西。

有点像

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
}

关于typescript - 在 TypeScript 中键入具有联合类型的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29794014/

相关文章:

javascript - Angular 4 - 具有动态参数值的自定义验证器

typescript - 导入外部定义

visual-studio - VS 中的 typescript 调试不适用于 Aurelia JSPM 设置

javascript - 如何在ag-grid中动态设置行高和列宽

javascript - angular 2 在 typescript 中使用 javascript 包

css - 在 NgStyle 中设置高度的 TypeScript 函数不起作用

typescript - 是否可以将 TypeScript 对象限制为仅包含其类定义的属性?

angularjs - 如何使用 TypeScript 在 Controller 中处理 Angular Promise

javascript - typescript 表格重置()不起作用

angular - 什么是AngularDart?与Angular 2+有什么不同?为什么没人谈论它?是好还是坏?