import { Promised } from "./utils";
declare global {
    interface Generator<T = unknown, TReturn = any, TNext = unknown> {
        single(): T;
        single(allow_empty: "or-default"): T | undefined;
        single(predicate: (item: T) => boolean): T;
        single(predicate: (item: T) => boolean, allow_empty: "or-default"): T | undefined;
        single<TRes extends T>(predicate: (item: T) => item is TRes): TRes;
        single<TRes extends T>(predicate: (item: T) => item is TRes, allow_empty: "or-default"): TRes | undefined;
    }
    interface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> {
        single(): Promise<T>;
        single(allow_empty: true): Promise<T | undefined>;
        single(predicate: (item: T) => Promised<boolean>): Promise<T>;
        single(predicate: (item: T) => Promised<boolean>, allow_empty: true): Promise<T | undefined>;
        single<TRes extends T>(predicate: (item: T) => item is TRes): Promise<TRes>;
        single<TRes extends T>(predicate: (item: T) => item is TRes, allow_empty: "or-default"): Promise<TRes | undefined>;
    }
}
