Ho una classe Manager
:TypeScript - Cambia il tipo di proprietà in child, è possibile?
class Manager{
/**
* Elements that are managed by the manager.
*/
private _elements: PIXI.DisplayObject[];
e una classe che estende la TextureManager
Manager
:
export class TextureManager extends Game.Managers.Manager{
private _elements: PIXI.DisplayObjectContainer[];
}
Solo così si sa, PIXI.DisplayObjectContainer
estende PIXI.DisplayObject
.
credo che perché è lo stesso tipo (basato sullo stesso oggetto: PIXI.DisplayObject
), il cambiamento di tipo dovrebbe essere possibile. (almeno è in linguaggio OOP reale, come Java, se ricordo correttamente)
Ma ricevo questo messaggio di errore durante la compilazione. Come dovrei fare?
TextureManager.ts (9,18): errore TS2416: Class 'TextureManager' si estende in modo non corretto classe base 'Manager':
tipi hanno dichiarazioni separate di una proprietà privata '_elements'.
Soluzione:
Può sembrare una soluzione semplice, ma TS 1.3
è stato appena rilasciato come 3 giorni fa e aggiungere il supporto per l'attributo -really volevamo- protected
. E sembra funzionare con un attributo protected
che funziona bene per cambiare il tipo, ho appena impostato protected _elements: any;
sulla classe genitore Manager
e personalizzare il tipo come voglio in qualsiasi bambino protected _elements: Game.Core.Texture;
. Molto carino.
Sono appena diventato rosso ovunque dal mio IDE (WebStorm) non ha rilasciato un supporto per TS 1.3, ma controllando Trigger watcher regardless of syntax error
nel File watcher
sono riuscito a farlo funzionare. Supporto disponibile a breve: https://youtrack.jetbrains.com/issue/WEB-14149
Quale versione di TypeScript usi? Nella versione 1.3, rilasciata pochi giorni fa, è stata introdotta la parola chiave 'protected' e probabilmente sarebbe utile qui. –
1.3, installato oggi. Non ci ho pensato. Proveremo. – Vadorequest
Funziona, grazie. Fortunatamente è appena stato rilasciato. – Vadorequest