UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

35 lines (31 loc) • 878 B
import type { Ary } from "."; import type { Args, GenericFn, GenericResolver } from "../HKT"; /** * Get the element type of an {@link Ary} (i.e., `Array` or `ReadonlyArray`). * * Sig: `<T>(a: Ary<T>) => T` * * @example * ```typescript * type R1 = Elem<readonly string[]>; * // ^?: string * type R2 = Elem<(number | boolean)[]>; * // ^?: number | boolean * type R3 = Elem<[]>; * // ^?: never * type R4 = Elem<[1, 2, 3]>; * // ^?: 1 | 2 | 3 * ``` */ export type Elem<A extends Ary> = A[number]; interface Resolver extends GenericResolver<[Ary<unknown>], unknown> { on1: ([a]: Args<this>) => [[], (typeof a)[number]]; } /** * [Fn] Get the element type of an {@link Ary} (i.e., `Array` or `ReadonlyArray`). * * Sig: `<T>(a: Ary<T>) => T` */ export default interface ElemFn extends GenericFn<Resolver> { def: ([a]: Args<this>) => Elem<typeof a>; }