import { MetricKeyType } from "@effect/core/io/Metrics/MetricKeyType";
import { MetricKey } from "@effect/core/io/Metrics/MetricKey";
import { MetricState } from "@effect/core/io/Metrics/MetricState";
import type { _Out } from "@effect/core/io/Metrics/MetricKeyType";
/**
 * @tsplus type ets/Metrics/MetricPair
 */
export interface MetricPair<Type extends MetricKeyType<any, any>> {
    readonly metricKey: MetricKey<Type>;
    readonly metricState: MetricState<[
        Type
    ] extends [{
        [_Out]: () => infer Out;
    }] ? Out : never>;
}
/**
 * @tsplus type ets/Metrics/MetricPair/Ops
 */
export interface MetricPairOps {
}
export declare const MetricPair: MetricPairOps;
export declare namespace MetricPair {
    type Untyped = MetricPair<MetricKeyType<any, any>>;
}
/**
 * @tsplus static ets/Metrics/MetricPair/Ops make
 * @tsplus location "@effect/core/io/Metrics/MetricPair"
 */
export declare function make<Type extends MetricKeyType<any, any>>(metricKey: MetricKey<Type>, metricState: MetricState<[
    Type
] extends [{
    [_Out]: () => infer Out;
}] ? Out : never>): MetricPair.Untyped;
/**
 * @tsplus static ets/Metrics/MetricPair/Ops unsafeMake
 * @tsplus location "@effect/core/io/Metrics/MetricPair"
 */
export declare function unsafeMake<Type extends MetricKeyType<any, any>>(metricKey: MetricKey<Type>, metricState: MetricState.Untyped): MetricPair.Untyped;
//# sourceMappingURL=MetricPair.d.ts.map