javascript - typescript 方法覆盖不起作用

标签 javascript class typescript overriding

我有一个基类 A 和一个覆盖 A 的 fetch 方法的扩展类 B。 但是,当我调用 B.fetch() 时,它会记录“基类”。为什么不调用B中定义的方法定义?

     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()
    }
}

最佳答案

嗯,方法签名是不同的。在 A 中,您返回 Promise<any>但在 B 中你返回 Promise<Data> .

可以在this snippet中看到您正在尝试做的事情肯定会奏效:

class A {
  static fetch (): string {
    return 'basefetch';
  }
}

class B extends A {
  static fetch(): any {
    return 'childfetch';
  }
}

let aVal: string = A.fetch();
console.log(`aVal: ${aVal}`);

let bVal: string = B.fetch();
console.log(`bVal: ${bVal}`);

关于javascript - typescript 方法覆盖不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47376027/

相关文章:

javascript - Array.prototype.join 在 IE 8 中不起作用

javascript - .htpsswrd 的 Apache 特定 md5 javascript 实现

javascript - 如何在纯 JavaScript 对象(非 DOM)上创建按键事件系统

c++ - 在 C++ 中你可以有一个指向函数的指针,你也可以有一个指向类的指针吗?

java - 如何从 CSV/Map 实例化 Scala 对象

css - 向下滚动时自动隐藏 Angular Material 工具栏(顶部导航栏)

javascript - 如何仅使用所需的键从另一个对象获取对象?

javascript - 如何将自动播放视频作为网页部分的背景(如此处 - http ://www8. hp.com/in/en/home.html)?

angular - 尝试将服务注入(inject) Angular 组件时出错 "EXCEPTION: Can' t 解析组件的所有参数”,为什么?

javascript - Angular 5 组件需要一个参数