export type rw = any
export type callback = Function
export type record<T = unknown> = Record<PropertyKey, T>
export type RecordValue<T> = T extends Record<PropertyKey, infer U> ? U : never
export type MapKey<T> = T extends Map<infer U, unknown> ? U : never
export type MapValue<T> = T extends Map<unknown, infer U> ? U : never
export type SetValue<T> = T extends Set<infer U> ? U : never
export type WeakMapKey<T> = T extends WeakMap<infer U, unknown> ? U : never
export type WeakMapValue<T> = T extends WeakMap<WeakKey, infer U> ? U : never
export type WeakSetValue<T> = T extends WeakSet<infer U> ? U : never
export type Optional<T> = T | undefined
export type Nullable<T> = T | null
export type Promisable<T> = T | Promise<T>
export type Arrayable<T> = T | Array<T>
export type NonVoid<T> = T extends void ? never : T
export type Arg<T extends ((...args: any[]) => any), index extends number = 0, required extends boolean = false> = required extends true ? NonNullable<Parameters<T>[index]> : Parameters<T>[index]
export type OmitFirstArg<F> = F extends (_0: any, ...args: infer T) => infer ReturnType ? (...args: T) => ReturnType : never
export type DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T
export type DeepReadonly<T> = T extends object ? { readonly [P in keyof T]: DeepReadonly<T[P]> } : T
export type DeepNonNullable<T> = { [P in keyof T]: T[P] extends object ? DeepNonNullable<NonNullable<T[P]>> : NonNullable<T[P]> }
export type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array
export type TypeOf = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
export type IsAny<T> = boolean extends (T extends never ? true : false) ? true : false
export type IsNotAny<T> = IsAny<T> extends true ? false : true
|