Typescript 为什么我必须显式地向下转换方法的参数?

Typescript 为什么我必须显式地向下转换方法的参数?,typescript,Typescript,我有一个基类,组件: module abc { export class Component {} } 我还有各种扩展这个基类的类: module cde { export class Position extends abc.Component {} } 现在,有一个实体类几乎只包含组件: module abc { export class Entity { add(component: Component) {} } } 为何我不能这样做

我有一个基类,组件:

module abc {
    export class Component {}
}
我还有各种扩展这个基类的类:

module cde {
    export class Position extends abc.Component {}
}
现在,有一个实体类几乎只包含组件:

module abc {
    export class Entity {
        add(component: Component) {}
    }
}
为何我不能这样做:

var entity = new abc.Entity().add(new cde.Position());
编译器抱怨
参数类型与参数不匹配
,即使我的Position类扩展了add方法所期望的组件类

改成

var entity = new abc.Entity().add(<abc.Component>new cde.Position());
var entity=new abc.entity().add(new cde.Position());
满足编译器错误,但我不明白为什么需要像那样显式向下转换



在阅读了Breeze的答案后,我拿出了我的实际代码,剪掉了不相关的部分,并将其粘贴到操场上。。。低看,代码实际工作。也许这是IntelliJ实现typescript的问题?我将继续调查。

我尝试了以下代码:

module moduleA {
    export class classA {}
}

module moduleB {
    export class classB extends moduleA.classA {}
}

module moduleA {
    export class classC {    
        add(m: classA) {}
    }
}

var c = new moduleA.classC();
c.add(new moduleB.classB());
编译器不会抱怨

两个问题,, 您使用的编译器版本是什么?
这是你的密码吗?(由于add方法不返回任何内容,但将其分配给“var entity”)

不,这不是确切的代码,因为它相当大。让我在typescript编辑器中简化实际代码,以便在重新发布之前知道问题仍然存在。