shelving
Version:
Toolkit for using data in JavaScript.
30 lines (29 loc) • 1.76 kB
TypeScript
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];
/** Extract the type for the value of an entry. */
export type EntryKey<X> = X extends Entry<infer Y, unknown> ? Y : never;
/** Extract the type for the value of an entry. */
export type EntryValue<X> = X extends Entry<unknown, infer Y> ? Y : never;
/** Convert an entry back into an object. */
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>>;