export type Defined = T extends undefined ? never : T; /** * isDefined check if the value is undefined or not. * it helps with typescript generic types. * @param value - */ export const isDefined = (value: V | undefined): value is Defined => value !== undefined; export declare type IsNever = [T] extends [never] ? true : false; export type NonNever = IsNever extends true ? any : T; export type Fn = (...args: any) => any; export type MethodKeys = { [P in keyof T]: T[P] extends Fn ? P : never; }[keyof T]; export type Methods = Pick>; export type KeyOfMethods = NonNever>; export type CB = (t: T) => void; export type StrictGuard = [T, CB]; export type CovarianceGuard = [T, unknown]; export type StrictMethodsGuard = { [P in keyof Methods]: StrictGuard; }; export type Parameters = T extends (...args: infer P) => any ? P : never;