/** * @template T */ class ValueObject { /** @type {{value: T}} */ props /** @type T */ get value() { return this.props.value; } /** * @protected * @param {T} value */ constructor(value) { /** @private */ this.props = {value}; } /** * @param {any} other * @returns {boolean} */ equals(other) { if (this === other) { return true; } if (other instanceof ValueObject) { if (this.value === other.value) { return true; } } return false; } } module.exports = ValueObject;