আমি আমার সময় বাঁচাতে এবং ক্লাসে PIXI ক্লাসগুলি (একটি 2 ডি ওয়েবজিএল রেন্ডারির পাঠাগার) প্রসারিত করার জন্য সাধারণ কোডটি পুনরায় ব্যবহার করতে চাই।
অবজেক্ট ইন্টারফেস:
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এবং আরো।
আমার এখানে অভিজ্ঞ টাইপসক্রিপ্ট প্রতিক্রিয়া / পরামর্শ প্রয়োজন, এটি করা অবশ্যই সম্ভব হবে, তবে একাধিক প্রসার দ্বারা নয় যেহেতু এই সময়ে কেবল একটিই সম্ভব, আমি অন্য কোনও সমাধান খুঁজে পাইনি।