javascript - 子类覆盖基类的返回类型
问题描述
我正在尝试覆盖super
类中定义的方法,但是我收到一条错误消息:
'Model' 类型中的属性 'get' 不能分配给基本类型 'DB' 中的相同属性。
我能做些什么来覆盖它?它适用于生成的 JavaScript,我不想让DB.get()
returnPromise<any>
也有效。
type NonAbstractModel<T extends Model> = (new () => T) & typeof Model
type RowDataPacket = {}
export class Collection<T> {
protected _items: T[] = []
public add(item:T){ this._items.push(item) }
}
export class DB {
public async get(): Promise<RowDataPacket[]> {
// Query a database, this is just dummy data
return [{}, {}, {}]
}
}
export abstract class Model extends DB {
public static convert<T extends Model>(model: NonAbstractModel<T>, data: RowDataPacket[]): Collection<T> {
let c = new Collection<T>()
for(let i of data) {
let m = new model()
c.add(m)
}
return c
}
public async get<T extends Model>():Promise<Collection<T>>{
return Model.convert(<NonAbstractModel<T>>this.constructor, await super.get())
}
}
两者如何工作:
D B
使用 DB 类时,我们不知道 Model 的类型,因为模型基于数据库表,但我们知道结果将是数据库项的数组。
模型
当使用模型时,我们确实知道模型的类型是什么,因此我们能够将数据包数据转换为模型集合(每个行项目一个模型类)。
解决方案
推荐阅读
- javascript - 在加载应用程序时在 VUEX 状态下使用 Axios 并在组件中使用 AXIOS
- angular - 如何处理角度 10 中的间隔内存泄漏?
- javascript - Javascript:对齐并行数组索引避免重叠
- javascript - React JS 在生产构建中进行 API 调用
- vba - 我正在尝试单击网页上的一个按钮,该按钮是使用 VBA 的图像
- html - 如何在网站容器的一定宽度内显示固定数量的模板卡片
- c# - WPF - 在 Wrappannel 中显示图像和文本框
- javascript - NEXT.JS - 错误:导出在以下路径遇到错误:/blogs/:post
- html - 压缩 html 文件,所以我可以通过电子邮件发送它
- html - 设置一个透明的滚动条,在其后面可见背景图像