-1

我有一个基类,组件:

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());

编译器抱怨说,Argument types do not match parameters即使我的 Position 类扩展了 Component 类,这是 add 方法所期望的类型......

将其更改为

var entity = new abc.Entity().add(<abc.Component>new cde.Position());

满足编译器错误,但我不明白为什么我需要像那样显式地向下转换..


在阅读了 Breeze 的回答后,我拿出了我的实际代码,剪掉了不相关的部分,并将其粘贴到操场上……低,看看代码确实有效。也许这是 IntelliJ 的打字稿实现的问题?我会继续调查。

4

1 回答 1

1

我尝试了以下代码:

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')

于 2012-12-11T20:34:59.823 回答