import { AtomConfig } from '@zedux/atoms';
import { AtomInstance } from './AtomInstance';
import { AtomTemplate } from './AtomTemplate';
import { AnyAtomGenerics, AtomGenerics, IonStateFactory } from './types';
export type IonInstanceRecursive<G extends Omit<AtomGenerics, 'Node' | 'Template'>> = AtomInstance<G & {
    Node: IonInstanceRecursive<G>;
    Template: IonTemplateRecursive<G>;
}>;
export type IonTemplateRecursive<G extends Omit<AtomGenerics, 'Node' | 'Template'>> = IonTemplate<G & {
    Node: IonInstanceRecursive<G>;
    Template: IonTemplateRecursive<G>;
}>;
export declare class IonTemplate<G extends AtomGenerics & {
    Node: IonInstanceRecursive<G>;
    Template: IonTemplateRecursive<G>;
} = AnyAtomGenerics> extends AtomTemplate<G> {
    private _get;
    constructor(key: string, stateFactory: IonStateFactory<Omit<G, 'Node' | 'Template'>>, _config?: AtomConfig<G['State']>);
    override(newGet?: IonStateFactory<G>): IonTemplate<G>;
}
