Chcę zaoszczędzić czas i ponownie używać wspólnego kodu między klasami, który rozszerza klasy PIXI (biblioteka renderująca 2d webGl).
Interfejsy obiektów:
module Game.Core {
export interface IObject {}
export interface IManagedObject extends IObject{
getKeyInManager(key: string): string;
setKeyInManager(key: string): IObject;
}
}
Moim problemem jest to, że kod wewnątrz getKeyInManager
i setKeyInManager
nie ulegnie zmianie i chcę go ponownie wykorzystać, a nie powielać, oto implementacja:
export class ObjectThatShouldAlsoBeExtended{
private _keyInManager: string;
public getKeyInManager(key: string): string{
return this._keyInManager;
}
public setKeyInManager(key: string): DisplayObject{
this._keyInManager = key;
return this;
}
}
Chcę automatycznie dodać Manager.add()
klucz używany w menedżerze do odniesienia się do obiektu wewnątrz samego obiektu w jego właściwościach _keyInManager
.
Weźmy więc przykład z teksturą. Tutaj idzieTextureManager
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);
}
}
}
Kiedy to zrobię this.add()
, chcę, aby Game.Managers.Manager
add()
metoda wywoływała metodę, która istniałaby w obiekcie zwróconym przez Game.Core.Texture.fromImage("/" + relativePath)
. Tym obiektem w tym przypadku byłby Texture
:
module Game.Core {
// I must extends PIXI.Texture, but I need to inject the methods in IManagedObject.
export class Texture extends PIXI.Texture {
}
}
Wiem, że IManagedObject
jest to interfejs i nie może zawierać implementacji, ale nie wiem, co napisać, aby wstrzyknąć klasę ObjectThatShouldAlsoBeExtended
do mojej Texture
klasy. Wiedząc, że sam proces będzie wymagana Sprite
, TilingSprite
, Layer
i więcej.
Potrzebuję tutaj opinii / porad doświadczonych w języku TypeScript, musi to być możliwe, ale nie przez wiele rozszerzeń, ponieważ w tym momencie możliwy jest tylko jeden, nie znalazłem żadnego innego rozwiązania.