यहां उचित निजी संपत्तियों को जोड़ने के लिए पुन: प्रयोज्य दृष्टिकोण दिया गया है:
/**
* 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नहीं करता है।