import { JsonValue } from '@contember/react-binding';
export interface GQLVariableType<Value = any, Required extends boolean = boolean> {
    graphQlType: string;
    required: Required;
}
export declare namespace GQLVariable {
    const Json: GQLVariableType<JsonValue<undefined>, false>;
    const String: GQLVariableType<string, false>;
    const Int: GQLVariableType<number, false>;
    const Required: <V>(type: GQLVariableType<V, boolean>) => GQLVariableType<V, true>;
    const List: <V>(type: GQLVariableType<V, false>) => GQLVariableType<V[], false>;
    const Enum: <V extends string>(name: string) => GQLVariableType<V, false>;
}
export type KeysMatching<T, V> = NonNullable<{
    [K in keyof T]: T[K] extends V ? K : never;
}[keyof T]>;
export type GQLVariableValues<VariableMap extends Record<string, GQLVariableType>> = {
    [K in KeysMatching<VariableMap, GQLVariableType<any, true>>]: VariableMap[K] extends GQLVariableType<infer Value, boolean> ? Value : never;
} & {
    [K in KeysMatching<VariableMap, GQLVariableType<any, false>>]?: VariableMap[K] extends GQLVariableType<infer Value, boolean> ? Value : never;
};
//# sourceMappingURL=variables.d.ts.map