rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
27 lines (23 loc) • 998 B
TypeScript
import type { Args, GenericFn, GenericResolver } from "../HKT";
import type { List, Pair } from "../List";
/**
* Convert a {@link List} (i.e., fixed-length tuple) of key-value pairs into an object.
*
* Sig: `<K extends PropertyKey, V>(entries: List<readonly [K, V]>) => Record<K, V>`
*/
export type FromEntries<Entries extends List<Pair<PropertyKey, unknown>>> =
{ [K in Entries[number] as K[0]]: K[1] } extends infer R ? { [K in keyof R]: R[K] } : never;
interface Resolver extends GenericResolver<[List<Pair<PropertyKey, unknown>>], object> {
on1: ([entries]: Args<this>) => [
[],
Record<(typeof entries)[number][0], (typeof entries)[number][1]>,
];
}
/**
* [Fn] Convert a {@link List} (i.e., fixed-length tuple) of key-value pairs into an object.
*
* Sig: `<K extends PropertyKey, V>(entries: List<readonly [K, V]>) => Record<K, V>`
*/
export default interface FromEntriesFn extends GenericFn<Resolver> {
def: ([entries]: Args<this>) => FromEntries<typeof entries>;
}