typescript - TS - 无法从子级调用 super() 内的公共方法
问题描述
我有两节课。一个是父模型类。另一个是它的孩子,所以:
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' keyword.ts(2340) 访问。
(如果这可能是一个解决方案,我可以在父类中重载forRequest()方法,如有必要,但不确定这是否是个好主意)。(在IModel中,我尝试了两种方式,有参数和没有参数)
我想知道这里与 TS 站点的示例有什么不同,以及为什么代码不起作用。
任何帮助表示赞赏。谢谢你。
解决方案
这里的区别在于您声明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
})
}
}
在这里查看它编译的内容
推荐阅读
- ios - 当调用 popToRootViewController 并设置 tabBarController selectedIndex 时,弹出的 VC 没有在同一个运行循环中调用 viewDidDisappear
- node.js - firebaseui-web:如何在 Node.js 后端识别用户?
- javascript - 谷歌未定义:如何检查是否在 React 中加载了谷歌地图脚本
- .net - ASP.NET MVC 5 中的表单/Windows/Passport 身份验证与身份验证过滤器
- windows - 使用 SVN 命令行的结帐操作
- node.js - 文件完全上传到磁盘时的 Multer 回调
- java - 如何使用硒验证从chrome浏览器下载的excel内容并处理下载的excel文件的受保护视图
- android - Realm Android:isValid()、isLoaded()、isManaged() 是什么意思?
- python - 在 ttk.Treeview 上覆盖删除方法的问题
- jquery - 具有可调整大小和可拖动的元素中的 jquery ui 问题