export declare type Action<TType extends string, TPayload = undefined, TMeta = undefined> = TPayload extends undefined ? (TMeta extends undefined ? {
    type: TType;
} : {
    type: TType;
    meta: TMeta;
}) : (TPayload extends Error ? (TMeta extends undefined ? {
    type: TType;
    payload: TPayload;
    error: true;
} : {
    type: TType;
    payload: TPayload;
    meta: TMeta;
    error: true;
}) : (TMeta extends undefined ? {
    type: TType;
    payload: TPayload;
} : {
    type: TType;
    payload: TPayload;
    meta: TMeta;
}));
export declare type AnyAction = Action<string>;
/**
 * Minimal (type-only) action factory
 * @example
 * const clearTodos = action('[Todo] truncate');
 */
export declare function createAction<TType extends string>(type: TType): Action<TType>;
/**
 * Action with error factory
 * @example
 * const fetchTodosRejected = (payload: Error) => action('[Todo] fetch rejected', payload);
 */
export declare function createAction<TType extends string, TPayload extends Error>(type: TType, payload: TPayload): Action<TType, TPayload>;
/**
 * Action with non-error payload factory
 * @example
 * const addTodo = ({ name, completed = false }: Todo) => action('[Todo] add', { name, completed });
 */
export declare function createAction<TType extends string, TPayload>(type: TType, payload: TPayload): Action<TType, TPayload>;
/**
 * Action with error and meta factory
 * @example
 * const fetchTodosRejected = (payload: Error, meta?: Meta) => action('[Todo] fetch rejected', payload, meta);
 */
export declare function createAction<TType extends string, TPayload extends Error, TMeta>(type: TType, payload: TPayload, meta: TMeta): Action<TType, TPayload, TMeta>;
/**
 * Action with payload and meta factory
 * @example
 * const addTodo = ({ name, completed = false }: Todo, meta?: Meta) => action('[Todo] add', { name, completed }, meta);
 */
export declare function createAction<TType extends string, TPayload, TMeta>(type: TType, payload: TPayload, meta: TMeta): Action<TType, TPayload, TMeta>;
