28 lines
1.7 KiB
TypeScript
28 lines
1.7 KiB
TypeScript
export type Nullable<T> = T | undefined;
|
|
export interface Morphism<T = any, U = any> {
|
|
(value: T): U;
|
|
}
|
|
export type Primitive = string | number | boolean | symbol | bigint | null | undefined;
|
|
export interface ToString {
|
|
toString(): string;
|
|
}
|
|
export declare function staticImplements<T>(): <U extends T>(constructor: U) => void;
|
|
export declare function isPlainObject(value: any): boolean;
|
|
export declare function isFunction(value: any): value is Function;
|
|
export declare function isIterable(value: any): value is Iterable<any>;
|
|
export declare function isString(value: any): value is string;
|
|
export declare function isNumber(value: any): value is number;
|
|
export type Constructor<T = any> = new (...args: any[]) => T;
|
|
export declare function orElse(thisArg: any, a: Nullable<Function>, b: Function): (...args: any) => any;
|
|
export declare function ifNull(thisArg: any, b: Function, ...args: any): (a: Nullable<Function>) => any;
|
|
export declare function mixin<U = any>(impl: Function): <TBase extends Constructor<U>>(constructor: TBase) => TBase;
|
|
type AnyFunc = (...arg: any) => any;
|
|
type PipeArgs<F extends AnyFunc[], Acc extends AnyFunc[] = []> = F extends [
|
|
(...args: infer A) => infer B
|
|
] ? [...Acc, (...args: A) => B] : F extends [(...args: infer A) => any, ...infer Tail] ? Tail extends [(arg: infer B) => any, ...any[]] ? PipeArgs<Tail, [...Acc, (...args: A) => B]> : Acc : Acc;
|
|
type LastFnReturnType<F extends Array<AnyFunc>, Else = never> = F extends [
|
|
...any[],
|
|
(...arg: any) => infer R
|
|
] ? R : Else;
|
|
export declare function pipe<FirstFn extends AnyFunc, F extends AnyFunc[]>(arg: Parameters<FirstFn>[0], firstFn: FirstFn, ...fns: PipeArgs<F> extends F ? F : PipeArgs<F>): LastFnReturnType<F, ReturnType<FirstFn>>;
|
|
export {};
|