Vad*_*est 14 inheritance overriding typescript
我有一节课Manager:
class Manager{
/**
* Elements that are managed by the manager.
*/
private _elements: PIXI.DisplayObject[];
Run Code Online (Sandbox Code Playgroud)
和一个TextureManager扩展的类Manager:
export class TextureManager extends Game.Managers.Manager{
private _elements: PIXI.DisplayObjectContainer[];
}
Run Code Online (Sandbox Code Playgroud)
只是你知道,PIXI.DisplayObjectContainer延伸PIXI.DisplayObject.
我相信,因为它是同一类型(基于同一对象上:PIXI.DisplayObject),类型的变化应该是可能的.(至少它是真正的OOP语言,如Java,如果我没记错的话)
但是在编译期间我收到此错误消息.我应该怎么做?
TextureManager.ts(9,18):错误TS2416:类'TextureManager'错误地扩展了基类'Manager':
类型具有私有属性'_elements'的单独声明.
解:
它似乎是一个简单的解决方案,但TS 1.3刚刚发布,就像3天前一样,并添加了对-really wanted- protected属性的支持.它似乎与一个protected属性一起使用它可以正常工作来改变类型,我只是protected _elements: any;在Manager父类上设置并在任何孩子中自定义我想要的类型protected _elements: Game.Core.Texture;.很酷.
由于我的IDE(WebStorm)尚未发布对TS 1.3的支持,我到处都变红了,但通过检Trigger watcher regardless of syntax error入File watcher我能够使它工作.支持即将推出:https://youtrack.jetbrains.com/issue/WEB-14149
Kub*_*oda 25
您无法在TypeScript中覆盖私有类成员.版本1.3,这是公布的前几天之前,有2只访问修饰符在TS:private和public,所以这里唯一的解决办法是使用public.
它在版本1.3中发生了变化.虽然私有成员仍然无法覆盖,但TS 1.3引入了protected辅助功能修饰符.它仍然阻止在类外部访问属性,但是它允许在子类中访问成员,并且与问题更相关,允许覆盖(但是覆盖的属性类型仍然必须可以分配给覆盖的属性) .
因此,在这种情况下,只需使用TypeScript 1.3,make _elementsprotected并为其提供一个可以覆盖的类型.