0

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

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

export class CellProps 
{
public width: number;
}

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

export class TableProps
{
public autoFit : boolean;
}

以上是样式和表格和单元格对象中的对象。这就是它变得复杂的地方,在样式中,我们所拥有的只是价值观。但是在 Table & Cell 对象中,如果在该对象中定义了值,那就是值。但是如果该值是 undefined/null,那么我们必须查看该对象的样式以查看它是否设置在那里。(这是为 Microsoft Word 建模。)

为此,样式有一个 TableProperties(在某些情况下还有一个 CellProps)。但在 Table & Cell 类中,它们具有以下实例:

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 实现中不起作用)。

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

4

1 回答 1

0

有什么办法可以做到这一点?我想出的最好的方法是说它为每个接口实现了一个接口,并在构造函数中将方法实现复制到原型中

不要将这些东西复制到prototype并使用 mixins 模式:http ://www.typescriptlang.org/docs/handbook/mixins.html

于 2015-06-22T00:07:30.767 回答