Я хочу сэкономить свое время и повторно использовать общий код между классами, который расширяет классы 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 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 обратная связь/советы здесь, это должно быть возможно сделать, но не с помощью нескольких расширений, поскольку в то время возможно только одно, я не нашел другого решения.