import { Expression } from '../core/expression'; export type Primitive = string | number | boolean | Date | bigint; export type IfPrimitive = NonNullable extends Primitive ? TThen : TElse; export type IfObject = IfPrimitive>; export type IfArray = NonNullable extends unknown[] ? TThen : TElse; export type IfAny = (any extends T ? never : TThen) extends never ? TThen : TElse; export type IfFunc = T extends (...args: any[]) => any ? TThen : TElse; export type PrimitiveFields = keyof TObj extends infer T ? T extends keyof TObj ? IfPrimitive : never : never; export type ObjectFields = keyof TObj extends infer T ? T extends keyof TObj ? IfObject : never : never; export type ArrayFields = keyof TObj extends infer T ? T extends keyof TObj ? IfArray : never : never; export type FuncFields = keyof TObj extends infer T ? T extends keyof TObj ? IfFunc : never : never; export type PickPrimitiveFields = Pick>; export type Expand = T extends infer O ? { [K in keyof O]: O[K]; } : never; export type ExpandRecursively = IfPrimitive; } : never : T>; export type WithAdditionalPropertyType = TActualObj & Record, TAdditionalProperty>; export type ExpressionArray = T extends [infer TFirst, ...infer TRest] ? [Expression, ...ExpressionArray] : T extends [] ? T : T extends unknown[] ? Expression[] : T; export type ArrayOf = TBase extends [any, ...infer TRest] ? [TElement, ...ArrayOf] : TBase extends [] ? [] : TElement[]; declare const errorSymbol: unique symbol; export type Error = [TMessage] & typeof errorSymbol; export type UnionToIntersection = (T extends any ? (t: T) => void : never) extends ((u: infer U) => void) ? U : never; export {};