我想节省时间,并在跨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()
管理器中用来在其属性中引用对象本身内部的对象的键_keyInManager
。
因此,让我们以Texture为例。这里去了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 extends PIXI.Texture, but I need to inject the methods in IManagedObject.
export class Texture extends PIXI.Texture {
}
}
我知道这IManagedObject
是一个接口,不能包含实现,但是我不知道写什么将类注入ObjectThatShouldAlsoBeExtended
我的Texture
类中。知道,同样的过程将需要为Sprite
,TilingSprite
,Layer
等等。
在这里,我需要有经验的TypeScript反馈/建议,但必须能够做到,但不能进行多次扩展,因为当时只有一种可能,我没有找到其他解决方案。