///
export type Mutable = {
-readonly [P in keyof T]: T[P];
};
export type ValueOf = T[keyof T];
export type Merge = Omit & N;
/** utility type to assert that the second type is a subtype of the first type.
* Returns the subtype. */
export type SubtypeOf = Subtype;
export type ResolutionType any> = T extends (...args: any) => Promise ? R : any;
export type MarkOptional = Omit & Partial>;
export type MarkRequired = Exclude & Required>;
export type MarkNonNullable = {
[P in K]-?: P extends K ? NonNullable : T[P];
} & {
[P in keyof T]: T[P];
};
export type NonOptional = Exclude;
export type SignatureType = T extends (...args: infer R) => any ? R : never;
export type CallableType any> = (...args: SignatureType) => ReturnType;
export type ForwardRef = Parameters>>[1];
export type ExtractSetType> = T extends Set ? U : never;
export type SameType = T extends U ? (U extends T ? true : false) : false;
export type Assert = T;
export type NestedKeyOf = K extends keyof T & (string | number) ? `${K}` | (T[K] extends object ? `${K}.${NestedKeyOf}` : never) : never;
export type SetLike = Set | T[];
export type ReadonlySetLike = ReadonlySet | readonly T[];
export type MakeBrand = {
[K in `~brand~${T}`]: T;
};
/** Maybe just promise or already fulfilled one! */
export type MaybePromise = T | Promise;
export type AllPossibleKeys = T extends any ? keyof T : never;