rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
31 lines (27 loc) • 1.01 kB
TypeScript
import type { Args, GenericFn, GenericResolver } from "..";
/**
* Append an element to a tuple.
*
* Sig: `<TS extends readonly unknown[], U>(y: U, xs: TS) => [...TS, U]`
*/
export type Append<U, TS extends readonly unknown[]> =
TS extends unknown[] ? [...TS, U] : readonly [...TS, U];
interface Resolver extends GenericResolver<[unknown, readonly unknown[]], readonly unknown[]> {
on1_: ([y]: Args<this>) => [[readonly unknown[]], readonly unknown[]];
on_1: ([, xs]: Args<this>) => [
[unknown],
typeof xs extends unknown[] ? [...typeof xs, unknown] : readonly [...typeof xs, unknown],
];
on11: ([y, xs]: Args<this>) => [
[],
typeof xs extends unknown[] ? [...typeof xs, typeof y] : readonly [...typeof xs, typeof y],
];
}
/**
* [Fn] Append an element to a tuple.
*
* Sig: `<TS extends readonly unknown[], U>(y: U, xs: TS) => [...TS, U]`
*/
export default interface AppendFn extends GenericFn<Resolver> {
def: ([y, xs]: Args<this>) => Append<typeof y, typeof xs>;
}