import '../../globals.js';
/**
 * Similar to DerivedProperty, but restricted to one Property and provides value-mapped and bidirectional support.
 * It's basically a DynamicProperty where you don't need to wrap it in an additional Property, and is typed a bit easier
 *
 * For example:
 *
 * const stringProperty = new Property<string>( 'hello' );
 * const lengthProperty = new MappedProperty( stringProperty, {
 *   map: ( str: string ) => str.length
 * } );
 * lengthProperty.value; // 5
 * stringProperty.value = 'hi';
 * lengthProperty.value; // 2
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import KeysMatching from '../../phet-core/js/types/KeysMatching.js';
import StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import DynamicProperty, { DynamicPropertyOptions } from './DynamicProperty.js';
import TReadOnlyProperty from './TReadOnlyProperty.js';
type SelfOptions<ThisValueType, InputValueType> = {
    bidirectional?: boolean;
    map?: ((inputValue: InputValueType) => ThisValueType) | KeysMatching<InputValueType, ThisValueType>;
    inverseMap?: ((thisValue: ThisValueType) => InputValueType) | KeysMatching<ThisValueType, InputValueType>;
};
type SuperOptions<ThisValueType, InputValueType> = StrictOmit<DynamicPropertyOptions<ThisValueType, InputValueType, TReadOnlyProperty<InputValueType>>, 'defaultValue' | 'derive'>;
export type MappedPropertyOptions<ThisValueType, InputValueType> = SelfOptions<ThisValueType, InputValueType> & SuperOptions<ThisValueType, InputValueType>;
export default class MappedProperty<ThisValueType, InputValueType> extends DynamicProperty<ThisValueType, InputValueType, TReadOnlyProperty<InputValueType>> {
    constructor(property: TReadOnlyProperty<InputValueType>, providedOptions?: MappedPropertyOptions<ThisValueType, InputValueType>);
}
export {};
//# sourceMappingURL=MappedProperty.d.ts.map