Ich möchte meine Zeit sparen und allgemeinen Code klassenübergreifend wiederverwenden, wodurch PIXI-Klassen (eine 2D-WebGl-Renderer-Bibliothek) erweitert werden.
Objektschnittstellen:
module Game.Core {
export interface IObject {}
export interface IManagedObject extends IObject{
getKeyInManager(key: string): string;
setKeyInManager(key: string): IObject;
}
}
Mein Problem ist, dass sich der Code darin befindet getKeyInManager
und setKeyInManager
sich nicht ändert und ich ihn wiederverwenden und nicht duplizieren möchte. Hier ist die Implementierung:
export class ObjectThatShouldAlsoBeExtended{
private _keyInManager: string;
public getKeyInManager(key: string): string{
return this._keyInManager;
}
public setKeyInManager(key: string): DisplayObject{
this._keyInManager = key;
return this;
}
}
Was ich tun möchte, ist, automatisch über a Manager.add()
den Schlüssel hinzuzufügen, der im Manager verwendet wird, um das Objekt innerhalb des Objekts selbst in seiner Eigenschaft zu referenzieren _keyInManager
.
Nehmen wir also ein Beispiel mit einer Textur. Hier geht dasTextureManager
module Game.Managers {
export class TextureManager extends Game.Managers.Manager {
public createFromLocalImage(name: string, relativePath: string): Game.Core.Texture{
return this.add(name, Game.Core.Texture.fromImage("/" + relativePath)).get(name);
}
}
}
Wenn ich dies tue this.add()
, möchte ich, dass die Game.Managers.Manager
add()
Methode eine Methode aufruft, die für das von zurückgegebene Objekt vorhanden ist Game.Core.Texture.fromImage("/" + relativePath)
. Dieses Objekt wäre in diesem Fall ein Texture
:
module Game.Core {
// I must extends PIXI.Texture, but I need to inject the methods in IManagedObject.
export class Texture extends PIXI.Texture {
}
}
Ich weiß, dass dies IManagedObject
eine Schnittstelle ist und keine Implementierung enthalten kann, aber ich weiß nicht, was ich schreiben soll, um die Klasse ObjectThatShouldAlsoBeExtended
in meine Texture
Klasse einzufügen . Zu wissen , dass der gleiche Prozess für erforderlich wäre Sprite
, TilingSprite
, Layer
und vieles mehr.
Ich benötige hier ein erfahrenes TypeScript-Feedback / Ratschläge, es muss möglich sein, aber nicht in mehreren Schritten, da zu diesem Zeitpunkt nur eines möglich ist. Ich habe keine andere Lösung gefunden.