打字稿 - 有没有办法在没有多重继承的情况下做到这一点

时间:2015-06-21 16:28:38

标签: typescript multiple-inheritance typescript1.5

Typescript不允许多重继承。如果是这样,下面的工作。没有它,我该怎么做?

我有一个CellProps类,它包含用于格式化单元格的变量。它有很多成员,但是对于这个例子,假设它是:

export class CellProps 
{
public width: number;
}

还有一个具有所有单元格格式的TableProps等等。所以对于这个例子它是:

export class TableProps
{
public autoFit : boolean;
}

以上是两种风格和表格中的对象。细胞对象。在这里,它变得复杂,我们所有的风格都是价值观。但在表格和表格中如果值在该对象中定义,则单元格对象具有该值。但是如果值未定义/为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实现中无法工作)。

或者复制代码并在其中注明必须对这两个类进行任何更改。但重复的代码要求重复的错误。

1 个答案:

答案 0 :(得分:0)

  

有什么办法吗?我提出的最好的是它为每个实现一个接口,并在构造函数中将方法实现复制到原型中

请勿将内容复制到prototype并使用mixins模式:http://www.typescriptlang.org/docs/handbook/mixins.html