0
我有一個打字稿應用程序的繼承層次結構如下所示:在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中的原型繼承而言,該方法將在層次結構中進行搜索,而不管它在何處定義。
作爲一種解決方法,我在基類中添加了抽象方法,然後在子類中提供實現。這樣做的問題是我需要能夠根據應用程序狀態交換一個子類。對我而言,似乎沒有必要在父類上定義一個所有子類都不需要實現的方法。
你聲明它是一個'A'。 TypeScript遵循大多數其他類型的語言,如果您將其聲明爲類型,那麼它就是該類型,而不是子類型。 –
要回答你的問題,是的,方法只能存在於子類型中 - 但是當你的引用是超類時,你不能引用子類特定的功能。 –
啊,我明白了。我認爲我正在尋找的是一個界面。編輯:能夠在實現該接口的類型之間進行更改。 –