将超类或接口分配给子类

时间:2017-11-22 09:23:54

标签: javascript typescript inheritance web lodash

我有以下设置:

class Dog extends Animal{}

class Animal{}

基本的继承设置。现在我有一个包含所有动物的不同类

class Farm{
     animals: Animal[];
}

现在在应用程序中的某一点我需要迭代数组,一旦找到一个狗我想将它分配给一个变量:

_.forEach(farm.animals, (animal:Animal)=>{
    if(animal instanceof Dog){
        this.dog = animal;
    }
}

但这给了我两个错误。首先,instanceof不起作用,它说参数的右侧是null。

第二个错误是,类型Animal不能分配给Dog类型。当我将Animal声明为接口时,情况也是如此。

1 个答案:

答案 0 :(得分:0)

instanceof错误必须是错误的,instanceof在那里很好。

你无法分配this.dog = animal;的原因是你需要一个演员阵容(奇怪的是,我无法让TypeScript游乐场向我展示这个错误):

this.dog = <Dog>animal;

this.dog = animal as Dog;