docs: function defineSetter(index, properties) {
          this.__defineSetter__(index, (value) => {
              // Don't proceed if readOnly is true.
              if (properties.readOnly) {
                  return;
              }
  
              try {
                  // this[_privateKey]._this[index] is used instead of this[_privateKey]._obj[index] to route through the public interface.
                  writeValue.call(this[_privateKey]._this,
                      typecast.call(this, value, this[_privateKey]._this[index], properties), properties);
              } catch (error) {
                  // Setter failed to validate value -- log error.
                  this[_privateKey]._errors.push(error);
              }
          });
      }