import tb from "ts-toolbelt"; import { Length } from "ts-toolbelt/out/List/Length"; import { Split } from "type-fest"; export type PrimitiveValue = string | number | boolean; export type Primitive = PrimitiveValue | Array; export type ObjectLiteral = Record; export type JSONValue = PrimitiveValue | JSONObject | JSONArray; export interface JSONObject { [x: string]: JSONValue; } export interface JSONArray extends Array { } export type Unpacked = T extends (infer U)[] ? U : T extends (...args: any[]) => infer U ? U : T extends Promise ? U : T; export type CType = new (...args: any[]) => T; export type AnyFunction = (...args: Args[]) => Return; export type FunctionArguments = T extends (...args: infer R) => any ? R : never; export type ArrayUnion> = T[number]; /** * Same as Partial but goes deeper and makes Partial all its properties and sub-properties. `*/ type DP = { [P in keyof T]?: T[P] extends Array ? Array> : T[P] extends ReadonlyArray ? ReadonlyArray> : DeepPartial; }; export declare type DeepPartial = { [P in keyof T]?: T[P] | DP; }; export type NonUndefined = A extends undefined ? never : A; export type NonFunctionKeys = { [K in keyof T]-?: NonUndefined extends Function ? never : K; }[keyof T]; export type StringOrNumber = string | number; export type AwaitFn, P = unknown> = tb.Function.Return extends Promise ? R : T; export type LiteralUnion = T | (U & {}); export type PickKnownKeysOptional = Pick>; export type PartialBy = Omit & Partial>; export type HasNestedPath = Length> extends 1 ? false : true; export type ToString = T extends string ? T : `${Extract}`; export type ToStringArray = T extends [infer F, ...infer R] ? F extends string | number | symbol ? [ToString, ...ToStringArray] : never : []; export type MergeBy = T extends [infer F, ...infer R] ? F[Key] extends string | number | symbol ? { [K in F[Key]]: F; } & MergeBy : never : {}; export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; export type DeepRequired = { [K in keyof T]-?: NonNullable>; }; export type Prettify = { [K in keyof T]: T[K]; } & {}; export type IsDefined = [T] extends [never] ? false : true; export type PickDefined = Pick; export {}; //# sourceMappingURL=types.d.ts.map