我想节省我的时间和重用通用代码跨类扩展 PIXI 类(一个2d webGl 渲染器库)。
对象接口:
module Game.Core {
export interface IObject {}
export interface IManagedObject extends IObject{
getKeyInManager(key: string): string;
setKeyInManager(key: string): IObject;
}
}
我的问题是 getKeyInManager
和 setKeyInManager
中的代码不会改变,我想重用它,而不是复制它,下面是实现:
export class ObjectThatShouldAlsoBeExtended{
private _keyInManager: string;
public getKeyInManager(key: string): string{
return this._keyInManager;
}
public setKeyInManager(key: string): DisplayObject{
this._keyInManager = key;
return this;
}
}
我想做的是通过 Manager.add()
自动添加管理器中用于引用对象 在里面的键,该对象本身在其属性 _keyInManager
中。
让我们举一个纹理的例子,这是 TextureManager
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);
}
}
}
当我执行 this.add()
时,我希望 Game.Managers.Manager
add()
方法调用一个方法,该方法存在于 Game.Core.Texture.fromImage("/" + relativePath)
返回的对象上。这个对象,在这个例子中是 Texture
:
module Game.Core {
// I must extend PIXI.Texture, but I need to inject the methods in IManagedObject.
export class Texture extends PIXI.Texture {
}
}
我知道 IManagedObject
是一个接口,不能包含实现,但是我不知道如何在 Texture
类中注入类 ObjectThatShouldAlsoBeExtended
。知道同样的过程将需要为 Sprite
,TilingSprite
,Layer
和更多。
我需要有经验的 TypeScript 反馈/建议在这里,它必须是可能做到这一点,但不是由多个扩展,因为只有一个可能的时候,我没有找到任何其他解决方案。