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

时间:2018-12-25 18:03:10

标签: 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 methods

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

import { IModel } from '../shared'
import DataModel from './_'

export default class LoginModel extends DataModel implements IModel {

  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
  ...
}

https://www.typescriptlang.org/docs/handbook/classes.html和带有动物的示例之后,我想调用forRequest()方法,将参数传递给父类。

但是,当我调用super.forRequest(...)时遇到错误:只能通过'super'关键字.ts(2340)访问基类的公共方法和受保护方法。

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

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

任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:2)

这里的区别在于您声明forRequest函数的方式。

您正在将一个函数分配为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
    })
  }
}

查看其可编译为here

的内容