Berikut pendekatan yang dapat digunakan kembali untuk menambahkan properti pribadi yang tepat:
/**
* 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);
}
}
Katakanlah Anda memiliki kelas di Clientsuatu tempat yang membutuhkan dua properti pribadi:
prop1: string
prop2: number
Di bawah ini adalah bagaimana Anda menerapkannya:
// 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;
}
}
Dan jika yang Anda butuhkan hanyalah satu properti pribadi, maka itu menjadi lebih sederhana, karena Anda tidak perlu mendefinisikannya ClientPrivatedalam kasus itu.
Perlu dicatat, bahwa untuk sebagian besar, kelas Privatehanya menawarkan tanda tangan yang dapat dibaca dengan baik, sedangkan penggunaan langsung WeakMaptidak.