import type { GenericObject } from './types.js';
type HasContext = () => boolean;
type SetContext<T> = (context: T | (() => T)) => void;
type GetContext<T, Strict extends boolean> = () => [Strict] extends [true] ? T : T | undefined;
type CreateContextReturn<T, Strict extends boolean> = [
    getContext: GetContext<T, Strict>,
    setContext: SetContext<T>,
    hasContext: HasContext
];
export declare function createContext<T extends GenericObject>(key: string, strict: true): CreateContextReturn<T, true>;
export declare function createContext<T extends GenericObject>(key: string, strict: false): CreateContextReturn<T, false>;
export declare function createContext<T extends GenericObject>(key: string): CreateContextReturn<T, true>;
export {};
