将类的子集定义为接口

时间:2017-08-24 17:38:10

标签: javascript typescript angular2-decorators

我有一个基类泛型类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中的装饰器对我来说是未知的领域。

1 个答案:

答案 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();
    }

}