@soil/arch
Version:
Architectural constructs for web applications.
15 lines (14 loc) • 1.12 kB
TypeScript
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;