Private properties implementation using WeakMap as described on MDN - Private Properties.
Actually this library does nothing more than exporting an interface for TypeScript.
This interface just extends WeakMap by overriding its get()
method to return I
instead of I | undefined
, because
data should already be set in constructor.
There is no need to do type assertion in every method to get internal data.
import { InternalDataInterface } from 'internal-data';
const internalData: InternalDataInterface<MyClass, Internal> = new WeakMap();
type Internal = { password: string };
class MyClass {
name: string;
constructor(name: string, password: string) {
const internal: Internal = { password };
internalData.set(this, internal);
this.name = name;
}
checkPassword(password: string): boolean {
const internal = internalData.get(this);
return internal.password === password;
}
}
const object = new MyClass('George', '1234');
const name = object.name; // -> George
const password = object.password; // -> TYPESCRIPT ERROR
const isValid = object.checkPassword('1234'); // -> true
import InternalData from 'internal-data';
const getInternal = InternalData.getFunction();
class MyClass {
constructor(name, password) {
const internal = getInternal(this);
this.name = name;
internal.password = password;
}
checkPassword(password) {
const internal = getInternal(this);
return internal.password === password;
}
}
const object = new MyClass('George', '1234');
const name = object.name; // -> George
const password = object.password; // -> Undefined
const isValid = object.checkPassword('1234'); // -> true
import InternalData from 'internal-data';
const internalData = new InternalData(); // eslint-disable-line no-use-before-define
class MyClass {
constructor(name, password) {
const internal = internalData.get(this);
this.name = name;
internal.password = password;
}
checkPassword(password) {
const internal = internalData.get(this);
return internal.password === password;
}
}
const object = new MyClass('George', '1234');
const name = object.name; // -> George
const password = object.password; // -> undefined
const isValid = object.checkPassword('1234'); // -> true
To access private properties of the object use getInternal(this)
method. It returns an object to store private attributes
of given object (In this case it is It is this
)
Class which provides private data storage.
Kind: global class
Hideconstructor:
- InternalData
- new InternalData()
- instance
- .get(object) ⇒
Object
- .get(object) ⇒
- static
- .getFunction() ⇒
GetInternalFn
- .getFunction() ⇒
Constructor
Returns private data object for given object.
Kind: instance method of InternalData
Returns: Object
-
Private data of given object.
Param | Type | Description |
---|---|---|
object | Object |
Object to get private data for. |
Returns a function to access private data object.
Kind: static method of InternalData
Returns: GetInternalFn
-
- Function to get private properties of given object.