作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 typescript 应用程序中有一个类似于以下内容的继承层次结构:
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 中的原型(prototype)继承,无论该方法是在哪里定义的,都将在层次结构中搜索该方法。
作为解决方法,我在基类中添加了一个抽象方法,然后在子类中提供实现。这样做的问题是,我需要能够根据应用程序状态将一个子类交换为另一个子类。对我来说,似乎没有必要在父类上定义一个所有子类都不需要实现的方法。
最佳答案
这不起作用,因为 instanceB
被声明为 A
类型,而不是子类型 B
。
如果 instanceB
确实是 B
的实例,则可以使用 type guard 执行属于 B
的方法。 :
var instanceB: A;
...
instanceB = new B(someObj);
if (instanceB instanceof B) {
instanceB.doStuff(); // no more error
}
或者通过断言 instanceB
为 B
类型:
// no more error, but will throw an error when instanceB is not B
(instanceB as B).doStuff();
关于javascript - 在 Typescript 中,方法只能存在于子类中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059571/
我是一名优秀的程序员,十分优秀!