Ich habe eine Basisklasse A und eine erweiterte Klasse B, die die Fetch-Methode von A überschreibt. Allerdings, wenn ich B.fetch() aufrufen, protokolliert 'Basisklasse'. Warum ruft es nicht die in B definierte Methodendefinition auf?Typescript-Methode Override funktioniert nicht
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()
}
}
Wie Sie die 'fetch' Methode aus der Klasse B anrufen? Kannst du diesen Teil posten? – Niladri
@Niladri Ich habe es hinzugefügt – Chris
@Chris 'B.fetch()' gibt ein 'Versprechen ' zurück und kann nicht 'b' vom Typ' B' zugewiesen werden. Ich nehme an, das ist alles Pseudo-Code, weil 'apiPath = this.apiPath' in Ihrer Methodensignatur auch nicht kompiliert wird, weil' apiPath' nicht statisch ist. Kannst du Plunkr anbieten, die dein Verhalten zeigen? – zgue