code: function deleteMetadata(metadataKey, target, propertyKey) {
              if (!IsObject(target))
                  throw new TypeError();
              if (!IsUndefined(propertyKey))
                  propertyKey = ToPropertyKey(propertyKey);
              var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);
              if (IsUndefined(metadataMap))
                  return false;
              if (!metadataMap.delete(metadataKey))
                  return false;
              if (metadataMap.size > 0)
                  return true;
              var targetMetadata = Metadata.get(target);
              targetMetadata.delete(propertyKey);
              if (targetMetadata.size > 0)
                  return true;
              Metadata.delete(target);
              return true;
          }
docs: Deletes the metadata entry from the target object with the provided key.
  @param metadataKey A key used to store and retrieve metadata.
  @param target The target object on which the metadata is defined.
  @param propertyKey (Optional) The property key for the target.
  @returns `true` if the metadata entry was found and deleted; otherwise, false.
  @example
  
  class Example {
  // property declarations are not part of ES6, though they are valid in TypeScript:
  // static staticProperty;
  // property;
  
  constructor(p) { }
  static staticMethod(p) { }
  method(p) { }
  }
  
  // constructor
  result = Reflect.deleteMetadata("custom:annotation", Example);
  
  // property (on constructor)
  result = Reflect.deleteMetadata("custom:annotation", Example, "staticProperty");
  
  // property (on prototype)
  result = Reflect.deleteMetadata("custom:annotation", Example.prototype, "property");
  
  // method (on constructor)
  result = Reflect.deleteMetadata("custom:annotation", Example, "staticMethod");
  
  // method (on prototype)
  result = Reflect.deleteMetadata("custom:annotation", Example.prototype, "method");