我有一个基类泛型类BaseModel
和一组子类,它们是我解决方案的模型。我想要做的是:
export default class Person extends Model {
public firstName: string;
public lastName: string;
public age: number;
protected modelName: 'person';
}
在Model
课程中,我们说:
export default abstract class Model {
public lastUpdated: string;
public createdAt: string;
protected abstract modelName: string;
// Public API
public update(key, payload: any) { ... }
public remove(key) { ... }
}
所以我希望能够在设计时提供的是一个具有所有公共属性但不包括API函数的接口。这在打字稿中是否可行?
P.S。我也在考虑使用实验装饰器功能的可能性,所以上面的Person模型可能看起来像:
export default class Person extends Model {
@property firstName: string;
@property lastName: string;
@property age: number;
protected modelName: 'person';
}
不确定这是否提供了任何其他方法来实现我的目标,因为JS中的装饰器对我来说是未知的领域。
答案 0 :(得分:0)
是的,您可以创建一个接口来放置公共属性,然后在派生类中实现该接口。您还可以在同一派生类中继承基类。
export interface IMyInterface {
firstName: string;
lastName: string;
age: number;
lastUpdated: string;
createdAt: string;
}
export default abstract class Model {
protected abstract modelName: string;
// Public API
public update(key:any, payload: any) { ... }
public remove(key:any) { ... }
}
export default class Person extends Model implements IMyInterface {
protected modelName:string = 'person';
//implement other properties here
constructor(){
super();
}
}