我有两节课。 一种是父模型类。另一个是它的孩子,所以:
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站点的示例有何不同,以及为什么代码不起作用。
任何帮助表示赞赏。谢谢。
答案 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
的内容