rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
35 lines (31 loc) • 878 B
TypeScript
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>;
}