У меня есть класс Manager
:
class Manager{
/**
* Elements that are managed by the manager.
*/
private _elements: PIXI.DisplayObject[];
и класс TextureManager
, который расширяет Manager
:
export class TextureManager extends Game.Managers.Manager{
private _elements: PIXI.DisplayObjectContainer[];
}
Просто, чтобы вы знали, PIXI.DisplayObjectContainer
extends PIXI.DisplayObject
.
Я считаю, что, поскольку он является одним и тем же типом (на основе одного и того же объекта: PIXI.DisplayObject
), изменение типа должно быть возможным. (по крайней мере, на реальных языках ООП, таких как Java, если я правильно помню)
Но я получаю это сообщение об ошибке во время компиляции. Как мне это сделать?
TextureManager.ts(9,18): ошибка TS2416: Class 'TextureManager' неправильно расширяет базовый класс 'Manager':
Типы имеют отдельные декларации "_elements" частной собственности.
Решение:
Это может показаться простым решением, но TS 1.3
только что был выпущен, как и 3 дня назад, и добавьте поддержку атрибута thereally 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