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實現中無法工作)。
或者將代碼複製並記錄在那裏,必須對這兩個類進行任何更改。但重複的代碼是要求重複的錯誤。
由於我沒有讀到任何地方:也許你可以利用[Mixins](https://github.com/Microsoft/TypeScript/wiki/Mixins)。然而,這會導致類接口(方法和字段)的重複,並且通常看起來「被強行附着」。你可以在這裏找到更多的討論(https://github.com/Microsoft/TypeScript/issues/311)。 –
請看看mixins,它應該只是你的問題 – gevik