import { unsubscribeBrand } from './functions';
import { Observable, Subscription } from 'rxjs';
import { Action } from '@ngrx/store';
import { InjectionToken, Type } from '@angular/core';
import { EffectConfig } from './effect-config';
export declare type Inject = <T>(token: Type<T> | InjectionToken<T>) => T;
export declare type Operand<T> = Observable<T> | Promise<T> | UnsubscribeOperation;
export declare type SubscriptionToken = number & {
    __brand: 'SubscriptionToken';
};
export declare type Cancellable<T> = Subscription | AbortController;
export declare type CancellationToken = number & {
    __brand: 'CancellationToken';
};
export declare type UnsubscribeOperation = {
    __brand: typeof unsubscribeBrand;
    subscriptionToken: SubscriptionToken;
};
export declare type ObservableEffect<T> = {
    operation: (inject: Inject) => Observable<T>;
    next?: (value: T) => Action;
    error?: (err: any) => Action;
    complete?: () => Action;
    subscribe?: (token: SubscriptionToken) => Action;
};
export declare type PromiseEffect<T> = {
    operation: (inject: Inject) => Promise<T>;
    resolve?: (value: T) => Action;
    reject?: (err: any) => Action;
};
export declare type UnsubscriptionEffect<T> = {
    operation: (inject: Inject) => UnsubscribeOperation;
    unsubscribe?: (token: CancellationToken) => Action;
};
export declare function isObservableEffect<E>(effect: EffectConfig<E>, operand: Operand<E>): effect is ObservableEffect<E>;
export declare function isPromiseEffect<E>(effect: EffectConfig<E>, operand: Operand<E>): effect is PromiseEffect<E>;
export declare function isUnsubscriptionEffect<E>(effect: EffectConfig<E>, operand: Operand<E>): effect is UnsubscriptionEffect<E>;
