///
/**
* Equivalent to the builtin Partial just recursive.
*
* @see https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype
*/
export type PartialRecursive = {
[P in keyof T]?: T[P] extends (infer U)[] ? PartialRecursive[] : T[P] extends Record ? PartialRecursive : T[P];
};
/**
* Converts a type from Promise to T.
*
* This does not unwrap recursively.
*/
export type UnwrapPromise = T extends Promise ? U : T extends (...args: unknown[]) => Promise ? U : T extends (...args: unknown[]) => infer U ? U : T;
/**
* The return type of setTimeout, this type be used with clearTimeout
*
* This exists because the return type is different on the web versus node
* */
export type SetTimeoutToken = ReturnType;
/**
* The return type of `setInterval`. This type can be used with `clearInterval`.
*/
export type SetIntervalToken = ReturnType;
export declare function IsNodeTimeout(timer: number | NodeJS.Timeout): timer is NodeJS.Timeout;
export type Constructor = new (...args: any[]) => T;
export declare function HasOwnProperty(obj: X, prop: Y): boolean;
export type WithNonNull = T & {
[P in K]: NonNullable;
};
export type WithRequired = T & {
[P in K]-?: T[P];
};
export type NonUndefined = T extends undefined ? never : T;
//# sourceMappingURL=types.d.ts.map