-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 クラスが、 add メソッドが期待する型である Component クラスを拡張しているにもかかわらず、不平を言います...

それをに変更する

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

コンパイラのエラーを満たしますが、そのように明示的にダウンキャストする必要がある理由がわかりません..


Breeze's answer を読んだ後、実際のコードを取り出し、無関係な部分を切り取り、プレイグラウンドに貼り付けました...コードが実際に機能することを確認してください。たぶん、IntelliJ の typescript の実装に問題があるのでしょうか? 調査を続けます。

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

そして、コンパイラは文句を言いません...

2 つの質問です。使用しているコンパイラのバージョンは何ですか? これはあなたの正確なコードですか?(addメソッドは何も返さないため、「varエンティティ」に割り当てます)

于 2012-12-11T20:34:59.823 に答える