Почему я должен явно понижать аргументы методов?

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

удовлетворяет ошибку компиляторов, но я не понимаю, почему мне нужно явно скрывать это.


Прочитав ответ Бриз, я вытащил свой фактический код, отрезал нерелевантные части и вложил его в игровую площадку... Низкий и вот код действительно работает. Может быть, это проблема с внедрением IntelliJ машинописного текста? Я продолжу расследование.

Теги:

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

И компилятор не жалуется...

Два вопроса. Какую версию компилятора вы используете? Это ваш точный код? (так как ваш метод добавления ничего не возвращает, но вы назначаете его "entity entity")

  • 0
    Нет, это не точный код, так как он довольно большой. Позвольте мне поработать над уменьшением фактического кода внутри редактора машинописного текста, чтобы я знал, что проблема все еще выставляется перед повторным размещением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню