import { Atom, WritableAtom, PrimitiveAtom } from 'jotai';
import { Getter, Setter } from '../core/types';
declare type AnyFunction = (...args: any[]) => any;
declare type ShouldRemove = (createdAt: number, param: Param) => boolean;
declare type AtomFamily = {
(param: Param): AtomType;
remove(param: Param): void;
setShouldRemove(shouldRemove: ShouldRemove | null): void;
};
export declare function atomFamily(initializeRead: (param: Param) => (get: Getter) => Value | Promise, initializeWrite: (param: Param) => (get: Getter, set: Setter, update: Update) => void | Promise, areEqual?: (a: Param, b: Param) => boolean): AtomFamily>;
export declare function atomFamily(initializeRead: (param: Param) => Value, initializeWrite: (param: Param) => (get: Getter, set: Setter, update: Update) => void | Promise, areEqual?: (a: Param, b: Param) => boolean): Value extends AnyFunction ? never : AtomFamily>;
export declare function atomFamily(initializeRead: (param: Param) => (get: Getter) => Value | Promise, initializeWrite?: null, areEqual?: (a: Param, b: Param) => boolean): AtomFamily>;
export declare function atomFamily(initializeRead: (param: Param) => AnyFunction, initializeWrite?: null, areEqual?: (a: Param, b: Param) => boolean): never;
export declare function atomFamily(initializeRead: (param: Param) => Value, initializeWrite?: null, areEqual?: (a: Param, b: Param) => boolean): AtomFamily>;
export {};