我想节省我的时间并在扩展 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;
}
}
我想要做的是通过 a 自动添加Manager.add()
管理器中使用的键,以在其 property 中引用对象本身内部的对象_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
是一个接口,不能包含实现,但我不知道写什么来ObjectThatShouldAlsoBeExtended
在我的Texture
类中注入类。知道Sprite
、TilingSprite
、Layer
等需要相同的过程。
我在这里需要有经验的 TypeScript 反馈/建议,必须有可能做到,但不能通过多个扩展,因为当时只有一个是可能的,我没有找到任何其他解决方案。