function PropertyBag(value, createPropertyCallback) {
  this._propertyNames = [];
  this._definitionChanged = new Event();

  if (defined(value)) {
    this.merge(value, createPropertyCallback);
  }
}
A {@link Property} whose value is a key-value mapping of property names to the computed value of other properties.

@alias PropertyBag
@implements Record<string, any>
@constructor

@param {object} [value] An object, containing key-value mapping of property names to properties.
@param {Function} [createPropertyCallback] A function that will be called when the value of any of the properties in value are not a Property.