Typescript TS-无法从子级调用super()中的公共方法

Typescript TS-无法从子级调用super()中的公共方法,typescript,oop,inheritance,Typescript,Oop,Inheritance,我有两节课。 一个是父模型类。另一个是它的孩子,因此: import { IModel } from '../shared' export default class DataModel implements IModel { private data: {[key: string]: any} = {} public constructor(data: {[key: string]: any}) { this.data = data } // ... other

我有两节课。 一个是父模型类。另一个是它的孩子,因此:

import { IModel } from '../shared'

export default class DataModel implements IModel {

  private data: {[key: string]: any} = {}

  public constructor(data: {[key: string]: any}) {
    this.data = data
  }

  // ... other methods

  public forRequest = (params?: {[key: string]: any}): object => {
    return {
      ...this.data,
      ...params
    }
  }
}

以及:

下面是关于动物的示例,我想调用我的
forRequest()
方法,将参数传递给父类

但是,当我调用
super.forRequest(…)
时,我得到一个错误:只有基类的公共和受保护的方法可以通过'super'关键字.ts(2340)访问

(如果这是一个解决方案,我可以在父类中重载forRequest()方法,但如果有必要,我不确定这是否是一个好主意)。(在IModel中,我尝试了两种方法,有参数和没有参数)

我想知道这里与TS站点的示例有什么不同,以及为什么代码不起作用


谢谢你的帮助。谢谢。

这里的区别在于您为请求声明
函数的方式

将函数指定为
forRequest
属性的值,而不是将其指定给原型

您只能访问子方法中的
super

如果改为这样做,您应该有访问权限

class DataModel {

  private data: {[key: string]: any} = {}

  public constructor(data: {[key: string]: any}) {
    this.data = data
  }

  // ... other methods

  public forRequest(params?: {[key: string]: any}): object {
    return {
      ...this.data,
      ...params
    }
  }
}

class LoginModel extends DataModel {

  constructor() {
    super({
      email: 'info@email.com',
      password: 'test1234'
    })
  }

  public forRequest(): object {
    return super.forRequest({
      sso: true
    })
  }
}

看看它编译成什么

谢谢!你是对的。关于箭头函数和“正常”赋值的用例,有一点非常重要。完全忘了!
export interface IModel {
  forRequest(params?: {[key: string]: any}): object
  ...
}
class DataModel {

  private data: {[key: string]: any} = {}

  public constructor(data: {[key: string]: any}) {
    this.data = data
  }

  // ... other methods

  public forRequest(params?: {[key: string]: any}): object {
    return {
      ...this.data,
      ...params
    }
  }
}

class LoginModel extends DataModel {

  constructor() {
    super({
      email: 'info@email.com',
      password: 'test1234'
    })
  }

  public forRequest(): object {
    return super.forRequest({
      sso: true
    })
  }
}