2017-08-24 103 views
1

我有一个父类,名为MyClass。它有两个孩子定义为:将子类的实例从父变量赋值给子变量

export class MyChildFirst extends MyClass {...} 
export class MyChildSecond extends MyClass {...} 

MyClass的每个实例都属于两个孩子中的一个。然后我有一个MyClass数组。我正在循环访问数组,并且我想将属于MyChildSecond的MyClass实例分配给MyChildSecond数组。

var bigArray = new Array<MyClass>(); 
// ... 
// populate that array 
// ... 
var smallArray = new Array<MyChildSecond>(); 
for (var element of bigArray) { 
    if (element.constructor.name === 'MyChildSecond') { 
     smallArray[smallArray.length] = element; 
    } 
} 

然而,这不工作,因为即使代码确保只有MyChildSecond将被分配到该阵列中,正在观看“元素”作为MyClass的,因此不能把它分配给一个变量持有MyChildSecond。我怎样才能实现这个?

+0

你的代码看起来不错,它在这里工作:https://plnkr.co/edit/grZj8tMKfkQ5Nixzh7Q8?p=preview – Pengyy

+0

这不是我的角申请的范围内工作。 –

回答

0

您可以使用instanceof和TypeScript中的类。

var smallArray = bigArray.filter(
        (element)=>element instanceof MyChildSecond 
       ) as MyChildSecond[]; 
+0

这将创建一个MyClass数组,它只包含那些是MyChildSecond实例的bigArray元素。我需要MyChildSecond数组的形式,而不是只包含MyChildSecond的MyClass数组。这意味着我无法访问MyChildSecond特有的元素,这是我的目标。 –

+0

@ chodobaggins不适合我。我已经更新了我的答案,以澄清类型问题。 – cgTag

+0

无论出于何种原因,这是返回一个空数组,我真的很困惑 –