Tapuscrit - Changement de la propriété type de l'enfant, est-il possible?
J'ai une classe Manager
:
class Manager{
/**
* Elements that are managed by the manager.
*/
private _elements: PIXI.DisplayObject[];
et une classe TextureManager
qui s'étend de la Manager
:
export class TextureManager extends Game.Managers.Manager{
private _elements: PIXI.DisplayObjectContainer[];
}
Si vous le savez, PIXI.DisplayObjectContainer
s'étend PIXI.DisplayObject
.
Je crois que parce que c'est le même type (basé sur le même objet: PIXI.DisplayObject
), le changement de type devrait être possible. (au moins, il est dans la vraie programmation orientée objet, les langages, comme Java, si je me souviens bien)
Mais je reçois ce message d'erreur lors de la compilation. Comment dois-je faire?
TextureManager.ts(9,18): erreur TS2416: la Classe de TextureManager' mal s'étend la classe de base "Manager":
Types de déclarations distinctes d'une propriété privée '_elements'.
Solution:
Il peut sembler comme une solution simple, mais TS 1.3
vient de sortir comme il ya 3 jours et ajouter le support pour le voulais vraiment- protected
attribut. Et il semble plus fonctionner avec un protected
attribut qu'il ne fonctionne bien pour changer le type, j'ai juste mis protected _elements: any;
sur le Manager
classe parent et de personnaliser le type que je veux dans n'importe quel enfant protected _elements: Game.Core.Texture;
. Assez cool.
Je viens de mettre du rouge partout depuis mon IDE (WebStorm) n'a pas publié un soutien pour TS 1.3, mais en vérifiant Trigger watcher regardless of syntax error
dans le File watcher
j'ai été capable de le faire fonctionner. Soutien à venir bientôt: https://youtrack.jetbrains.com/issue/WEB-14149
protected
mot-clé introduit, et il serait probablement aider ici.1.3, installé aujourd'hui. Ne pense pas à ce sujet. Va donner un essai.
Cela fonctionne, merci. De la chance, il vient de sortir.
J'ai ajouté à la solution, grâce ou à votre aide, appréciée!
Vous petit plus ponctuellement ai ajouter cela comme une réponse afin que tout le monde voir la question a une solution (vous l'esprit si je le fais?). Et, en plus, vous n'avez pas à utiliser
any
type dans votre super-classe, si PIXI.DisplayObjectContainer
s'étend PIXI.DisplayObject
alors vous pouvez aussi utiliser PIXI.DisplayObject
ilOriginalL'auteur Vadorequest | 2014-11-15
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas remplacer un membre de classe privée en caractères d'imprimerie. Avant la version 1.3, qui a été publié il y a quelques jours, il n'y avait que 2 en matière d'accessibilité des modificateurs en TS:
private
etpublic
, donc la seule solution ici serait de l'utiliserpublic
.Il changé dans la version 1.3. Alors que les membres ne peuvent toujours pas être surchargée, TS 1.3 introduit la
protected
accessibilité modificateur. Il empêche encore la propriété d'être accessible en dehors de la classe, mais il permet à ses membres d'être accessible dans les sous-classes et, ce qui est plus pertinent pour la question, permet primordial (mais le type de propriété qui remplace encore être assignable à le remplacé en a une).Donc dans ce cas il suffit d'utiliser la Machine 1.3, faire
_elements
protégés et de lui donner un type qu'il est possible d'être écrasé.generics<type>
, voir: blogs.msdn.com/b/typescript/archive/2014/11/12/...OriginalL'auteur Kuba Jagoda