我有一个基本的泛型类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 函数的接口。这在打字稿中可能吗?
附言我还在考虑使用实验性装饰器功能的可能性,因此上面的 Person 模型可能如下所示:
export default class Person extends Model {
@property firstName: string;
@property lastName: string;
@property age: number;
protected modelName: 'person';
}
不确定这是否提供了任何其他方法来实现我的目标,因为 JS 中的装饰器对我来说是未知的领域。
是的,您可以创建一个接口来放置公共属性,然后在派生类中实现该接口。还可以在同一派生类中继承基类。
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();
}
}