2015-06-21 82 views
0

Typescript不允許多重繼承。如果是這樣,下面的工作。沒有它,我該怎麼做?Typescript - 有沒有辦法做到這一點,沒有多重繼承

我有一個CellProps類,它包含用於格式化單元格的變量。它有一噸的成員,但在這個例子中,假設它是:

export class CellProps 
{ 
public width: number; 
} 

而且還有具有所有單元格的格式,以及更多TableProps。因此,對於這個例子是:

export class TableProps 
{ 
public autoFit : boolean; 
} 

以上是兩種風格,並在表& Cell對象的對象。這就是它變得複雜的地方,我們所有的風格都是價值。但是在表&單元對象中,如果該值在該對象中定義,那就是該值。但是如果該值爲undefined/null,那麼我們必須查看該對象的樣式以查看它是否設置在那裏。 (這是Microsoft Word的建模。)

爲此,樣式具有TableProperties(並且在某些情況下爲CellProps)。但在表&細胞類,它們擁有的實例:

export class TablePropValues extends TableProps 
{ 
// ... 
public isAutoFit() : boolean 
{ 
// return this.autoFit if defined, otherwise check the style. 
} 
} 
export class CellPropsValues extends CellProps 
{ 
public getWidth() : number 
{ 
// return this.width if defined, otherwise check the style. 
} 
} 

這裏的問題。我真正需要的是:

export class TablePropValues extends TableProps, CellPropsValues 
{ 
} 

因爲在TablePropValues我需要getWidth()和autoFit。這不僅僅是我需要的兩個方面,它是方法和它們的實現。

是的,我只能使用TablePropValues並沒有TableProps,它的一切工作。但是,然後我失去了編譯時檢查,確保在使用基於樣式的對象時我不會調用getter - 這非常有用。

TablePropValues和CellPropsValues都添加了一個具有相同名稱和類的私有(並且沒有公共)var。這用於根據需要走到樣式對象。所以如果Typescript有#include,那也可以解決這個問題。

任何方式來做到這一點?我認爲最好的是說它爲每個實現一個接口,並在構造器中將方法實現複製到原型中。但是這讓我感到脆弱(在某些JavaScript實現中無法工作)。

或者將代碼複製並記錄在那裏,必須對這兩個類進行任何更改。但重複的代碼是要求重複的錯誤。

+0

由於我沒有讀到任何地方:也許你可以利用[Mixins](https://github.com/Microsoft/TypeScript/wiki/Mixins)。然而,這會導致類接口(方法和字段)的重複,並且通常看起來「被強行附着」。你可以在這裏找到更多的討論(https://github.com/Microsoft/TypeScript/issues/311)。 –

+0

請看看mixins,它應該只是你的問題 – gevik

回答

相關問題