import '../../globals.js';
import ReadOnlyProperty, { PropertyOptions } from './ReadOnlyProperty.js';
import TProperty from './TProperty.js';
/**
 * Adds initial value and reset, and a mutable interface.
 *
 * @author Sam Reid (PhET Interactive Simulations)
 */
export default class Property<T> extends ReadOnlyProperty<T> implements TProperty<T> {
    protected _initialValue: T;
    constructor(value: T, providedOptions?: PropertyOptions<T>);
    /**
     * Returns the initial value of this Property.
     */
    getInitialValue(): T;
    get initialValue(): T;
    /**
     * Stores the specified value as the initial value, which will be taken on reset. Sims should use this sparingly,
     * typically only in situations where the initial value is unknowable at instantiation.
     */
    setInitialValue(initialValue: T): void;
    /**
     * Overridden to make public
     */
    get value(): T;
    /**
     * Overridden to make public
     * We ran performance tests on Chrome, and determined that calling super.value = newValue is statistically significantly
     * slower at the p = 0.10 level( looping over 10,000 value calls). Therefore, we prefer this optimization.
     */
    set value(newValue: T);
    reset(): void;
    /**
     * Overridden to make public
     */
    set(value: T): void;
    isSettable(): boolean;
}
export type { PropertyOptions };
//# sourceMappingURL=Property.d.ts.map