2017-08-24 53 views
0

我有一個基本泛型類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.我也在考慮使用實驗裝飾功能的可能性,因此,上述人模式可能類似於:

export default class Person extends Model { 
    @property firstName: string; 
    @property lastName: string; 
    @property age: number; 
    protected modelName: 'person'; 
} 

不知道這是否提供任何附加的方式來實現我的目標是在JS裝飾是一個未知的領域我。

回答

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

} 
+0

是的,這是真的,但我希望是沒有必要定義接口_and_然後將公共屬性添加到類。似乎像TS拔/挑/或映射鍵可能能夠實現這一點?也很可能爲API定義一個接口,然後我可以從公共接口中排除API嗎? – ken

相關問題