import type Accessor from "./Accessor.js";

/** Mixin that adds a `clone` method for making a deep copy of an instance. */
export abstract class ClonableMixin {
  constructor(...args: any[]);
  /**
   * Creates a deep clone of this object. Any properties that store values by reference will be
   * assigned copies of the referenced values on the cloned instance.
   *
   * @returns A deep clone of the class instance that invoked this method.
   */
  clone(): this;
}

export abstract class Clonable extends ClonableSuperclass {}
declare const ClonableSuperclass: & typeof Accessor & typeof ClonableMixin