我正在使用Mixin模式,如下图所示。为什么Typescript要求您为目标类(A)中的mixin类的私有属性提供替代属性?对于公共属性来说它是完全有意义的,但是对于私有属性,它通过要求它们在目标类中被删除而不必要地使用mixin类的内部实现的细节来完成目标类。看起来像Typescript转换器应该不能要求这个。
class Mixin {
private foo:string;
}
class A implements Mixin {
// stand-in properties, typescript requires even
// private properties to be stubbed-out
foo:string;
}
答案 0 :(得分:1)
私有成员对TypeScript中的类型结构起作用,因此如果不实现它们,则与该类型不兼容。这实际上使得如果它具有私有成员,则无法在TypeScript中在结构上匹配类型,因为您要么:
一个。未能提供类型
或
湾提供私有成员的单独实现
因此,您只能extend
具有私有成员的类型,而不是implement
。
考虑到这一点,最好不要使用带有mixins的私有成员。在实现类中提供ghost-members并保持交叉,如果mixins获得一些牵引力,则不需要重影(参见TypeScript mixins part one)。