UNPKG

@soil/arch

Version:

Architectural constructs for web applications.

15 lines (14 loc) 1.12 kB
export declare type Primitive = boolean | number | string | symbol | null | undefined | void; export declare type Not<T extends boolean> = T extends true ? false : true; export declare type Or<A extends boolean, B extends boolean> = A extends true ? true : B extends true ? true : false; export declare type Or3<A extends boolean, B extends boolean, C extends boolean> = Or<A, Or<B, C>>; export declare type And<A extends boolean, B extends boolean> = A extends true ? B extends true ? true : false : false; export declare type IsA<T, E> = T extends E ? true : false; export declare type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false; export declare type IsReadonly<O extends Record<any, any>, P extends keyof O> = Not<Equals<{ [_ in P]: O[P]; }, { -readonly [_ in P]: O[P]; }>>; export declare type IsIndexSignature<P> = Or<IsA<string, P>, IsA<number, P>>; export declare type IsCallback<F extends Function> = F extends (...args: any[]) => any ? And<Not<IsA<Parameters<F>[0], Primitive>>, IsA<Parameters<F>[0], Event>> extends true ? true : false : false;