import type { ImmutableArray } from "./array.js";
import type { ImmutableObject } from "./object.js";
import type { ImmutableSet } from "./set.js";
/**
 * Single entry from a map-like object.
 * - Consistency with `UnknownObject`
 * - Always readonly.
 */
export type Entry<K = unknown, T = unknown> = readonly [K, T];
/** Helper type to extract the type for the value of an entry. */
export type EntryKey<X> = X extends Entry<infer Y, unknown> ? Y : never;
/** Helper type to extract the type for the value of an entry. */
export type EntryValue<X> = X extends Entry<unknown, infer Y> ? Y : never;
/**
 * Helper type to turn an entry back into an object with one property.
 * i.e. `EntryObject<Entry<"a", string>>` produces `{ a: string }`
 */
export type EntryObject<T extends Entry<PropertyKey, unknown>> = {
    readonly [E in T as E[0]]: E[1];
};
/** Extract the key from an object entry. */
export declare function getEntryKey<K, T>([k]: Entry<K, T>): K;
/** Extract the value from an object entry. */
export declare function getEntryValue<K, T>([, v]: Entry<K, T>): T;
/** Yield the keys of an iterable set of entries. */
export declare function getEntryKeys<K, T>(input: Iterable<Entry<K, T>>): Iterable<K>;
/** Yield the values of an iterable set of entries. */
export declare function getEntryValues<K, T>(input: Iterable<Entry<K, T>>): Iterable<T>;
/** Yield the entries in something that can yield entries. */
export declare function getEntries<K extends string, T = K>(...input: (ImmutableSet<K & T> | Partial<ImmutableObject<K, T>> | Iterable<Entry<K, T>>)[]): Iterable<Entry<K, T>>;
export declare function getEntries<K extends number, T = K>(...input: (ImmutableArray<T> | ImmutableSet<K & T> | Iterable<Entry<K, T>>)[]): Iterable<Entry<K, T>>;
export declare function getEntries<K, T = K>(...input: (ImmutableSet<K & T> | Iterable<Entry<K, T>>)[]): Iterable<Entry<K, T>>;
