gpt4 book ai didi

javascript - 在 Typescript 中,方法只能存在于子类中吗?

转载 作者:行者123 更新时间:2023-12-02 16:12:11 28 4
gpt4 key购买 nike

我在 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
}

或者通过断言 instanceBB 类型:

// 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com