import '../../assert/js/assert.js';
import './PhetioIDUtils.js';
import '../../globals.js';
import { Validator } from '../../axon/js/Validation.js';
import IntentionalAny from '../../phet-core/js/types/IntentionalAny.js';
import StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import PhetioObject, { PhetioObjectOptions } from './PhetioObject.js';
import IOType from './types/IOType.js';
export type Parameter = {
    name?: string;
    phetioDocumentation?: string;
    phetioPrivate?: boolean;
} & Validator;
type SelfOptions = {
    parameters?: Parameter[];
    phetioOuterType: (t: IOType[]) => IOType;
    hasListenerOrderDependencies?: boolean;
};
export type PhetioDataHandlerOptions = SelfOptions & StrictOmit<PhetioObjectOptions, 'phetioType'>;
declare class PhetioDataHandler<T extends IntentionalAny[] = []> extends PhetioObject {
    private readonly parameters;
    constructor(providedOptions?: PhetioDataHandlerOptions);
    /**
     * @param parameters
     * @param tandemSupplied - proxy for whether the PhetioObject is instrumented.  We cannot call
     *                                 - PhetioObject.isPhetioInstrumented() until after the supercall, so we use this beforehand.
     */
    private static validateParameters;
    /**
     * Validate that provided args match the expected schema given via options.parameters.
     */
    protected validateArguments(...args: T): void;
    /**
     * Validate that provided args match the expected schema given via options.parameters.
     */
    getValidationErrors(...args: T): Array<string | null>;
    /**
     * Gets the data that will be emitted to the PhET-iO data stream, for an instrumented simulation.
     * @returns the data, keys dependent on parameter metadata
     */
    getPhetioData(...args: T): null | Record<string, unknown>;
    /**
     * Get the phetioDocumentation compiled from all the parameters
     */
    private static getPhetioDocumentation;
}
export default PhetioDataHandler;
//# sourceMappingURL=PhetioDataHandler.d.ts.map