У меня есть класс 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