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实现中无法工作)。
或者复制代码并在其中注明必须对这两个类进行任何更改。但重复的代码要求重复的错误。
答案 0 :(得分:0)
有什么办法吗?我提出的最好的是它为每个实现一个接口,并在构造函数中将方法实现复制到原型中
请勿将内容复制到prototype
并使用mixins模式:http://www.typescriptlang.org/docs/handbook/mixins.html