Typescript-使用类作为接口,为什么我必须实现私有成员/方法?

时间:2015-02-26 17:01:59

标签: interface typescript mixins

我正在使用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;
}

1 个答案:

答案 0 :(得分:1)

私有成员对TypeScript中的类型结构起作用,因此如果不实现它们,则与该类型不兼容。这实际上使得如果它具有私有成员,则无法在TypeScript中在结构上匹配类型,因为您要么:

一个。未能提供类型

湾提供私有成员的单独实现

因此,您只能extend具有私有成员的类型,而不是implement

考虑到这一点,最好不要使用带有mixins的私有成员。在实现类中提供ghost-members并保持交叉,如果mixins获得一些牵引力,则不需要重影(参见TypeScript mixins part one)。

相关问题