/** * An array that is guaranteed to have at least one element. */ export type NonEmptyArray = [T, ...Array]; /** * Extracts keys from a type that can be undefined. */ export type PickUndefinedKeys = { [K in keyof T]: undefined extends T[K] ? K : never; }[keyof T]; /** * Extracts keys from a type that cannot be undefined (required). */ export type PickRequiredKeys = { [K in keyof T]: undefined extends T[K] ? never : K; }[keyof T]; /** * Selects only the optional properties from a type. */ export type SelectOptional = Pick, undefined>>; /** * Selects only the required properties from a type. */ export type SelectRequired = Pick, undefined>>; /** * Checks if an object type is empty (has no keys). */ export type IsEmptyObject = Obj extends Record ? [keyof Obj] extends [never] ? true : false : true; export type OmitNever = { [K in keyof T as T[K] extends never ? never : K extends undefined ? never : K]: T[K]; }; export type OnlyNever = { [K in keyof T as T[K] extends never ? K : K extends undefined ? K : never]: T[K]; }; export type OptionalNever = OmitNever & Partial>; export type AnyFn = (p: any) => string; export type VoidFn = () => void; export type ParamFn = (p: Params) => string;