【发布时间】:2015-05-05 17:31:46
【问题描述】:
我在打字稿应用程序中有一个继承层次结构,类似于以下内容:
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 遵循大多数其他类型化语言,如果将其声明为类型,则它是该类型,而不是子类型。 -
回答您的问题,是的,方法只能存在于子类型中——但是当您引用超类时,您不能引用特定于子类的功能。
-
啊,我明白了。我认为我正在寻找的是一个界面。编辑:能够在实现该接口的类型之间进行更改。
标签: javascript visual-studio inheritance typescript