Quiero ahorrar tiempo y reutilizar código común en todas las clases que amplía las clases PIXI (una biblioteca de renderizado webGl 2d).
Interfaces de objetos:
module Game.Core {
export interface IObject {}
export interface IManagedObject extends IObject{
getKeyInManager(key: string): string;
setKeyInManager(key: string): IObject;
}
}
Mi problema es que el código dentro getKeyInManagery setKeyInManagerno cambiará y quiero reutilizarlo, no duplicarlo, aquí está la implementación:
export class ObjectThatShouldAlsoBeExtended{
private _keyInManager: string;
public getKeyInManager(key: string): string{
return this._keyInManager;
}
public setKeyInManager(key: string): DisplayObject{
this._keyInManager = key;
return this;
}
}
Lo que quiero hacer es agregar automáticamente, a través de a Manager.add(), la clave utilizada en el administrador para hacer referencia al objeto dentro del propio objeto en su propiedad _keyInManager.
Entonces, tomemos un ejemplo con una textura. Aquí va elTextureManager
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);
}
}
}
Cuando lo haga this.add(), quiero que el Game.Managers.Manager add()método llame a un método que existiría en el objeto devuelto por Game.Core.Texture.fromImage("/" + relativePath). Este objeto, en este caso sería un Texture:
module Game.Core {
// I must extends PIXI.Texture, but I need to inject the methods in IManagedObject.
export class Texture extends PIXI.Texture {
}
}
Sé que IManagedObjectes una interfaz y no puede contener implementación, pero no sé qué escribir para inyectar la clase ObjectThatShouldAlsoBeExtendeddentro de mi Textureclase. Sabiendo que sería necesario el mismo proceso para Sprite, TilingSprite, Layery mucho más.
Necesito comentarios / consejos de TypeScript con experiencia aquí, debe ser posible hacerlo, pero no mediante múltiples extensiones, ya que solo es posible una en ese momento, no encontré ninguna otra solución.