যথাযথ ব্যক্তিগত সম্পত্তি যুক্ত করার জন্য এখানে পুনরায় ব্যবহারযোগ্য পদ্ধতি:
/**
* Implements proper private properties.
*/
export class Private<K extends object, V> {
private propMap = new WeakMap<K, V>();
get(obj: K): V {
return this.propMap.get(obj)!;
}
set(obj: K, val: V) {
this.propMap.set(obj, val);
}
}
ধরা যাক আপনার Clientকোথাও ক্লাস রয়েছে যার জন্য দুটি ব্যক্তিগত সম্পত্তি প্রয়োজন:
prop1: string
prop2: number
নীচে আপনি কীভাবে এটি বাস্তবায়ন করেছেন:
// our private properties:
interface ClientPrivate {
prop1: string;
prop2: number;
}
// private properties for all Client instances:
const pp = new Private<Client, ClientPrivate>();
class Client {
constructor() {
pp.set(this, {
prop1: 'hello',
prop2: 123
});
}
someMethod() {
const privateProps = pp.get(this);
const prop1 = privateProps.prop1;
const prop2 = privateProps.prop2;
}
}
এবং যদি আপনার কেবলমাত্র একটি একক ব্যক্তিগত সম্পত্তি হয় তবে এটি আরও সহজ হয়ে যায়, কারণ আপনাকে ClientPrivateসে ক্ষেত্রে কোনও সংজ্ঞা দেওয়ার দরকার নেই ।
লক্ষণীয় যে, বেশিরভাগ অংশের জন্য, শ্রেণি Privateকেবল একটি দুর্দান্তভাবে পঠনযোগ্য স্বাক্ষর সরবরাহ করে, যেখানে সরাসরি ব্যবহার WeakMapনা করে।