У меня есть иерархия наследования в приложении машинописи, похожее на следующее:В машинописном документе может ли существовать метод только в подклассе?
class A {
someProp: any;
constructor(someObj: any){
}
}
class B extends class A {
constructor(someObj: any){
super(someObj);
}
public doStuff(){
console.log("doing stuff!");
}
}
Во втором файле, я пытаюсь вызывать методы подкласса после инстанцирования его следующим образом:
var instanceB: A;
...
instanceB = new B(someObj);
instanceB.doStuff(); // produces error symbol cannot be resolved, it is probably located in an inaccessible module
Так Что я делаю не так? Насколько я понимаю прототипное наследование в JavaScript, метод будет искать в иерархии независимо от того, где он определен.
Как обходной путь, я добавил абстрактный метод в базовый класс, а затем я предоставляю реализацию в подклассе. Проблема заключается в том, что мне нужно иметь возможность подкачки одного подкласса для другого в зависимости от состояния приложения. И для меня нет необходимости определять метод родительского класса, который не должен реализовывать все подклассы.
Вы объявляете это как 'A'. TypeScript следует за большинством других типизированных языков, если вы объявляете его как тип, это тот тип, а не подтип. –
Чтобы ответить на ваш вопрос, да, методы могут существовать только в подтипах, но когда ваша ссылка на суперкласс, вы не можете ссылаться на определенные подклассы функции. –
А, я вижу. Я думаю, что тогда я ищу интерфейс. edit: чтобы иметь возможность изменять типы, реализующие этот интерфейс. –