serde-ts/dist/utils.d.ts
2025-05-18 20:05:52 -05:00

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 {};