У меня есть базовый класс, компонент:
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 машинописного текста? Я продолжу расследование.
Я попробовал следующий код:
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")