私はベースクラスAと、Aのフェッチメソッドをオーバーライドする拡張クラスBを持っています。 しかし私がB.fetch()を呼び出すと、 'baseclass'がログに記録されます。なぜそれがBで定義されたメソッド定義を呼び出さないのですか?typescriptメソッドオーバーライドが機能しません。
class A {
protected apiPath: string = ''
static async fetch (id = null, Model = this, apiPath = this.apiPath): Promise<any> {
console.log('basefetch')
let url = apiPath
if(id) url += '/' + id
let { data } = await axios.get(url)
let item: any = new Model(data)
return item
}
}
class B extends A {
static async fetch(id = null, Model = this, apiPath = this.apiPath): Promise<Data> {
console.log('childfetch')
let {data} = await axios.get(apiPath)
if (typeof data.challenge.participating == 'undefined') {
data.challenge.participating = null
}
if (typeof data.challenge.progress == 'undefined') {
data.challenge.progress = null
}
return new Model(data)
}
class SomeOtherModule {
async doSomething() {
let b: B = await B.fetch()
}
}
を使用すると、クラスBから 'fetch'メソッドを呼び出している方法は?あなたはその部分を投稿できますか? – Niladri
@ニラドリ私はそれを追加しました – Chris
@Chris 'B.fetch()は' Promise 'を返し、' B'型の 'b'に代入することはできません。 'apiPath'は静的ではないので、メソッドシグネチャの' apiPath = this.apiPath'もコンパイルされないので、これはすべて擬似コードとみなします。自分の行動を示すplunkrを提供できますか? – zgue